Javascript 返回多个承诺(Firebase云函数)

Javascript 返回多个承诺(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

我有一个Firebase云函数,它将一个新认证的用户添加到Firestore数据库中

当前函数 但是,我想在return
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(...);
});