【问题标题】:Firebase Cloud Functions - When to return Promises - NodeJsFirebase 云函数 - 何时返回 Promise - NodeJs
【发布时间】:2021-05-31 13:34:06
【问题描述】:

我正在尝试侦听集合中新文档的创建,每当创建新文档时,我都需要执行以下操作:

  1. 从文档中获取 uid 和 posts 字段
  2. 如果帖子数大于或等于 6,则使用 uid 和其他数据在另一个集合中创建一个新文档。

这是我使用的代码不起作用,我不知道为什么。 老实说,我已经多次阅读有关 Promises 的文档,但并没有很好地理解它们:

exports.onPostAdded = functions.firestore
.document("Posts/{id}/Posts/{docId}")
.onCreate((snapshot, context) => {
  const userId = context.params.id;
  db.collection("Users").doc(userId)
      .get().then((snap) => {
        const data = snap.data();
        const posts = data.posts;
        const uid = data.uid;
        if (posts<=6) {
          db.collection("Showcases").add({
            name: "Tokyo",
            country: "Japan",
            uid: uid,
          });
        }
      })
      .catch((err) => {
        console.error(err);
      });
});

老实说,我不知道何时何地返回 Promise。

【问题讨论】:

    标签: node.js promise google-cloud-functions


    【解决方案1】:

    任何包含异步操作的后台云函数都必须从其顶级代码返回一个承诺。

    如果您有嵌套的异步操作,您可以从这些操作中冒泡。在你的情况下,看起来像这样:

    exports.onPostAdded = functions.firestore
    .document("Posts/{id}/Posts/{docId}")
    .onCreate((snapshot, context) => {
      const userId = context.params.id;
      return db.collection("Users").doc(userId)
          .get().then((snap) => {
            const data = snap.data();
            const posts = data.posts;
            const uid = data.uid;
            if (posts<=6) {
              return db.collection("Showcases").add({
                name: "Tokyo",
                country: "Japan",
                uid: uid,
              });
            }
          })
    });
    

    这是一个很常见的话题,所以我建议学习一些关于它的现有资料,例如:

    【讨论】:

    • 谢谢!为了从两个嵌套函数中捕获错误,我需要在第一个 then() 的末尾设置一次捕获?
    • "我需要在第一个 then() 的末尾设置一次捕获吗?" => 是的,将一个 catch 块放在承诺链的末尾(在您的情况下,第一个 then() 也是最后一个)。除了 Frank 指出的文档/文章之外,我建议您阅读此 doc on Promise chaining。
    • Renaud 的文档也不错!
    • 谢谢大家,太有帮助了!
    猜你喜欢
    • 2020-03-31
    • 2017-09-14
    • 2018-12-05
    • 2018-06-12
    • 2019-08-06
    • 2021-06-21
    • 2021-02-12
    • 2021-09-16
    • 2018-12-03
    相关资源
    最近更新 更多