Javascript 返回多个承诺(Firebase云函数)
我有一个Firebase云函数,它将一个新认证的用户添加到Firestore数据库中 当前函数 但是,我想在returnJavascript 返回多个承诺(Firebase云函数),javascript,promise,google-cloud-functions,Javascript,Promise,Google Cloud Functions,我有一个Firebase云函数,它将一个新认证的用户添加到Firestore数据库中 当前函数 但是,我想在returnprivateUserInfoRef.set({已完成)之后返回另一个承诺 我想将avgRating&numRatings设置为admin.firestore().doc('/publicUserInfo/${uid}');。如果您想一次接一次地运行多个操作,并返回最后一个(或第一个失败的)的结果,您可以链接then()子句: return privateUserInfoRef
privateUserInfoRef.set({
已完成)之后返回另一个承诺
我想将
avgRating
&numRatings
设置为admin.firestore().doc('/publicUserInfo/${uid}');
。如果您想一次接一次地运行多个操作,并返回最后一个(或第一个失败的)的结果,您可以链接then()
子句:
return privateUserInfoRef.set({
isAnonymous: true,
avgRating: 0,
numRatings: 0,
loggedInAt: Date.now()
}).then((resultOfSet) => {
return anotherRef.set(...);
});
您可以根据需要重复此链
如果您有多个可以并行运行的操作,也可以使用
Promise.all()
返回所有操作的组合结果:
return Promise.all([
privateUserInfoRef.set(...)
anotherRef.set(...)
]);
返回值将是一个数组,其中包含单个set()
操作的结果
这里我只是以
set()
操作为例。此模式适用于任何返回承诺的调用,包括(对于实时数据库)one()
和push()
,但也适用于返回承诺的非Firebase操作。尝试以下操作:
return privateUserInfoRef.set({
isAnonymous: true,
avgRating: 0,
numRatings: 0,
loggedInAt: Date.now()
})
.then(() => {
return admin.firestore().doc(...).update(...);
});
then
返回一个承诺,该承诺将传播到return
语句。继续链接then
块以执行更多异步工作。云函数将等待整个链完成。这是JavaScript中的基本承诺处理(但使用异步/等待语法会更容易)
我强烈建议您广泛学习JavaScript承诺的工作原理,以便在NodeJ上有效地使用云函数。这将在将来为您节省大量时间。因此,
privateUserInfoRef.set
返回一个承诺?使用。然后
链接下一个承诺。您可以提供有关.then chain?somePr的更多信息吗然后(函数(result){returnsomeotherpromise;})。然后(函数(resultofOther){…})
依此类推
return privateUserInfoRef.set({
isAnonymous: true,
avgRating: 0,
numRatings: 0,
loggedInAt: Date.now()
})
.then(() => {
return admin.firestore().doc(...).update(...);
});