我为firebase创建了一个google函数,当添加新对话时,该函数将其附加到对话中每个用户的新集合下的Users表中,但是当该函数被触发时,数据库中到目前为止没有任何反应我已经在控制台上记录了tp值,以确保它们设置正确,并且我还尝试查看google函数日志,并且根据脚本运行的日志没有错误
这是该函数的代码
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
export const onConversationCreated = functions.firestore.document("Conversations/{conversationID}").onCreate((snapshot, context) => {
let data = snapshot.data();
let conversationID = context.params.conversationID;
if(data){
let members = data.members;
for(let index = 0; index < members.length; index++){
let currentUserID = members[index];
let remainingUserIDs = members.filter((u: string) => u !== currentUserID)
remainingUserIDs.forEach((m: string) => {
return admin.firestore().collection("Users").doc(m).get().then((_doc) => {
let userData = _doc.data();
if(userData){
return admin.firestore().collection("Users").doc(currentUserID).collection("Conversations").doc(m).create({
"conversationID": conversationID,
"image": userData.image,
"unseenCount": 1,
});
}
return null;
}).catch(() => {return null})
});
}
}
return null;
});
有人可以告诉我我的代码是否有问题,还是我必须授予功能写入云Firestore数据库的权限?
答案 0 :(得分:0)
您没有正确处理诺言。您的函数需要返回一个可以解决所有异步工作的诺言。现在,它只是返回null,而不是等待任何工作完成。
所有 Firestore操作是异步的,并返回诺言。您将需要使用这些promise建立一个从函数返回的promise。这意味着每次查询和编写文档时,都会产生另一个承诺。
此外,您应该知道没有试图使用的方法create()
添加文档。也许您打算使用set()
来代替。如果代码尝试执行create()
,则代码将崩溃。