【发布时间】:2021-08-02 04:01:12
【问题描述】:
我试图弄清楚为什么我的 firebase 作弊函数总是在创建,但是当像打开它调用创建函数的聊天时立即发送消息,消息将不会被保存,因为我的函数还没有准备好,所以我怎么能唯一这?。 这是我的功能。
export const onConversationCreated = functions.firestore.
document("Conversations/{conversationID}").onCreate((snapshot, context) => {
const data = snapshot.data();
const conversationID = context.params.conversationID;
if (data) {
const members = data.members;
for (let index = 0; index < members.length; index++) {
const uid = members[index];
const remainingUserIDs = members.filter((u: string) => u !== uid);
remainingUserIDs.forEach((m: string) => {
return admin.firestore().
collection("profile").doc(m).get().then((_doc) => {
const userData = _doc.data();
if (userData) {
return admin.firestore().collection("profile")
.doc(uid).collection("Conversations").doc(m).create({
"conversationID": conversationID,
"url": userData.url,
"name": userData.username,
"unseenCount": 0,
});
}
return null;
}).catch(() => {
return null;
});
});
}
}
return null;
});
export const onConversationUpdated = functions.firestore
.document("Conversations/{conversationID}").onUpdate((change, context) => {
const data = change?.after.data();
if (data) {
const members = data.members;
const lastMessage = data.messages[data.messages.length - 1];
for (let index = 0; index < members.length; index++) {
const uid = members[index];
const remainingUserIDs = members.filter((u: string) => u !== uid);
remainingUserIDs.forEach((u: string) => {
return admin.firestore().collection("meinprofilsettings")
.doc(uid).collection("Conversation").doc(u).update({
"lastMessage": lastMessage.message,
"timestamp": lastMessage.timestamp,
"type": lastMessage.type,
"lastmessageuid": lastMessage.senderID,
"unseenCount": admin.firestore.FieldValue.increment(1),
});
});
}
}
return null;
});
所以再次创建是正确的工作。它只是需要一些时间。当我在调用 create 函数时立即写一条消息并发送它时,在 create 函数完成之前,这条消息不会被保存,那么我必须再次发送消息
【问题讨论】:
-
您可以将函数设为
Future,然后在其上应用whenComplete(),仅在函数执行时处理。或await为您的功能拨打新电话之前 -
怎么样?你可以编辑我的代码吗?
标签: flutter dart google-cloud-firestore google-cloud-functions