在Firebase函数中从Firestore获取数据时出现问题



我正在尝试捕获文档的更新并向所有用户发送通知,但捕获值我在解析它时遇到了问题。

在console.log((中,这是捕获数据:

{ createdAt: Timestamp { _seconds: 1586881980, _nanoseconds: 0 },
messages: 
[ { content: 'Un nuevo comienzo para tod@s!n:)n😀n:-Pn😉',
createdAt: [Object],
displayName: 'Fer...',
photoUrl: 'https://lh3.googleusercontent.com/...',
uid: 'IJchaq...' },
{ content: '🙋',
createdAt: [Object],
displayName: 'IMP...',
photoUrl: 'https://lh3.googleusercont...' } 
...

这就是我的功能:

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();
// const db = admin.firestore();
const fcm = admin.messaging();
export const sendToTopic = functions.firestore
.document("chats/{chatsId}")
.onUpdate((change, context) => {
const newValue = change.after.data();
// console.log(newValue);
let latestMessage = newValue.messages[0]; // newValue gives me object is possibly 'undefined'
const payload: admin.messaging.MessagingPayload = {
notification: {
title: "New Message",
body: latestMessage,
icon:
"https://www.dropbox...",
clickAction: "FLUTTER_NOTIFICATION_CLICK",
},
};
return fcm.sendToTopic("globalChat", payload);
});

如何从newValue中获取最新的displayName和内容?

我通过更改为newValue?messages[0];解决了这个问题

EDIT:根据@fenchai的评论,我删除了以前的解决方案,因为它引入了新的错误。问题的关键当然是处理typescript中的值,这些值可能为null或未定义。Typescript会希望您对它们进行null检查。

我对此进行了进一步的研究,SF的这篇帖子有了更多的澄清:https://stackoverflow.com/a/58401023/10303131

正如@fenchai所指出的,你可以使用?操作人员

请阅读Typescript的发布说明,截至2019年底:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html

感兴趣的项目:

可选链接:

// Make x = foo.bar(). If foo null or undefined, x will be undefined.
let x = foo?.bar()

空聚结:

// Makes x equal to foo, or if it is null/ undefined, call bar(). 
let x = foo ?? bar();

从firebase函数的角度来看,我仍然建议任何人在调用进一步的代码之前对重要变量进行null检查,因为你将有机会澄清重要的错误,因为firebase函数可能并不总是告诉你哪个值是未定义的,以及问题的根本原因。

示例:

const message = myDocument?.data()?.message;
if (message === null || message === undefined){
console.error("Message is undefined or null");
// Proceed, or return if message vital to function.  
}

相关内容

  • 没有找到相关文章

最新更新