尝试部署 FCM 功能时获取对象可能 'undefined'
Getting Object is possibly 'undefined' when trying to deploy FCM function
我正在尝试使用 FCM 函数从 firebase 数据库中的文档中获取数据。
export const sendToDevicePaidBribe = functions.firestore
.document('PaidBribe/{bribeId}')
.onCreate(async snapshot => {
const report = snapshot.data();
const querySnapshot = await db
.collection('users')
.doc(report.uid).get();
const token = querySnapshot.data();
const payload: admin.messaging.MessagingPayload = {
notification: {
title: 'Report Submited!',
body: `Report id: ${report.id} on ${report.date}`,
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK'
}
};
return fcm.sendToDevice(token.fcmToken, payload);
});
当我尝试部署函数时,出现以下错误。
src/index.ts:48:30 - error TS2532: Object is possibly 'undefined'.
return fcm.sendToDevice(token.fcmToken, payload);
~~~~~
有人可以指导我为什么会出现此错误吗?
由于 Firestore 无法保证任何给定文档在查询之前就存在,因此您应该在代码中自行检查。请注意 API 文档,如果文档不存在,snapshot.data() 可以 return 未定义。 TypeScript 让你处理代码中未定义的可能性。你可以通过在使用它之前简单地检查它来做到这一点:
const token = querySnapshot.data();
if (token) {
// work with token safely here
}
在 if (token)
块内,TypeScript 向您保证 token
不可能是未定义的,您可以自由地安全地引用它的属性。
我正在尝试使用 FCM 函数从 firebase 数据库中的文档中获取数据。
export const sendToDevicePaidBribe = functions.firestore
.document('PaidBribe/{bribeId}')
.onCreate(async snapshot => {
const report = snapshot.data();
const querySnapshot = await db
.collection('users')
.doc(report.uid).get();
const token = querySnapshot.data();
const payload: admin.messaging.MessagingPayload = {
notification: {
title: 'Report Submited!',
body: `Report id: ${report.id} on ${report.date}`,
icon: 'your-icon-url',
click_action: 'FLUTTER_NOTIFICATION_CLICK'
}
};
return fcm.sendToDevice(token.fcmToken, payload);
});
当我尝试部署函数时,出现以下错误。
src/index.ts:48:30 - error TS2532: Object is possibly 'undefined'.
return fcm.sendToDevice(token.fcmToken, payload);
~~~~~
有人可以指导我为什么会出现此错误吗?
由于 Firestore 无法保证任何给定文档在查询之前就存在,因此您应该在代码中自行检查。请注意 API 文档,如果文档不存在,snapshot.data() 可以 return 未定义。 TypeScript 让你处理代码中未定义的可能性。你可以通过在使用它之前简单地检查它来做到这一点:
const token = querySnapshot.data();
if (token) {
// work with token safely here
}
在 if (token)
块内,TypeScript 向您保证 token
不可能是未定义的,您可以自由地安全地引用它的属性。