【发布时间】:2020-08-24 23:42:38
【问题描述】:
我正在尝试制作一个聊天应用程序并使用 Firestore 和云功能。 我的 Firestore 结构是
Users -> name,username,email,etc...
Conversations -> members:[memberId1,memberId2]
当创建了一个新对话时,我正在向 Users/{memberId}/Conversation 集合添加一个对话集合,但它要么没有被创建,要么需要很长时间才能创建
这是我将对话信息添加到用户集合的云功能
functions.firestore
.document('Conversations/{conversationId}')
.onCreate((snapshot:any, context:any) => {
const data = snapshot.data();
const conversationId = context.params.conversationId;
if (data) {
const members = data.members;
if(!Array.isArray(members)){
console.log("Members is not an array")
return null;
}
for ( const member of members) {
const currentUserId = member;
const remainingUserIDs = members.filter((u:string) => u !== currentUserId);
remainingUserIDs.forEach(async (m:string) => {
return admin
.firestore()
.collection('Users')
.doc(m)
.get()
.then((_doc) => {
const userData = _doc.data();
if (userData) {
return admin
.firestore()
.collection('Users')
.doc(currentUserId)
.collection('Conversations')
.doc(m)
.create({
conversationId: conversationId,
image: userData.profilePic,
username: userData.username,
unseenCount: 0,
userId: m,
});
}
return null;
})
.catch((err) => {
console.log(err);
return null;
});
});
}
}
return null;
});
我在日志中看到它的调用没有错误,但没有添加数据,或者创建需要很长时间。 我究竟做错了什么 ? 另一个有趣的事情是我已经在模拟器上测试了这个功能,它工作正常,但在生产中存在问题
【问题讨论】:
-
create()是异步函数吗?如果是,则在返回语句中添加await。
标签: javascript firebase google-cloud-firestore google-cloud-functions