javascript - 返回多个 promise (Firebase 云函数)

标签 javascript promise google-cloud-functions

我有一个 Firebase Cloud 功能,可以将新通过身份验证的用户添加到 Firestore 数据库中。

当前函数

exports.createUserAccount = functions.auth.user().onCreate((user) => {
    const uid = user.uid;
    const privateUserInfoRef = admin.firestore().doc(`/privateUserInfo/${uid}`);
    return privateUserInfoRef.set({
        isAnonymous: true,
        avgRating: 0,
        numRatings: 0,
        loggedInAt: Date.now()
    });
});

但是,我想在 return privateUserInfoRef.set({ 完成后返回另一个 promise。

我想改变 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() 操作作为例子。此模式适用于返回 promise 的任何调用,包括(对于实时数据库)once()push(),但也适用于返回 promise 的非 Firebase 操作.

关于javascript - 返回多个 promise (Firebase 云函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59207057/

相关文章:

javascript - 扩展内置的 javascript Promise

javascript - $ ("#id").load 和 $.ajax 之间的区别?

javascript - 通过ajax获取数据,然后使用select应用过滤器

javascript - 使用 gzip 压缩 JavaScript

javascript - 使用 Widget 代码中的 javascript 将光标图像左滑向右移动

firebase - 如何使用 Firestore 对 Firebase HTTP 功能进行集成测试

javascript - 在 JavaScript 中使用 Promise 制作异步函数

javascript - 当在 then 函数内部分配 $scope 值时,数据绑定(bind)不起作用

Firebase Cloud Functions 部署错误,错误代码为 "NoSuchKey"

firebase - Google Cloud Platform 网络控制台 - 未显示云功能指标图