首页 > 解决方案 > 每当使用 Firebase 函数创建另一个集合中的另一个文档时,如何从集合中更新文档?

问题描述

因此,每当创建新销售时,我都会尝试更新项目余额,因此我正在监听该销售创建并让所有项目检查新销售和项目之间的匹配 ID 并更新其余额

功能已部署,但项目余额没有任何变化

 export const itemsBalance = functions.firestore

.document("sales/{id}")
.onCreate((snap, context) => {
  //get sale data and items data
  const data = snap.data();

  //get all items
  let myItems;
  firebase.firestore().collection('items').get()
  .then(snapshot => {
      myItems = snapshot.docs.map(doc => doc.data());

      data.items.forEach((element, index) => {
          let updatedItem = myItems.find(el => el.id == element.id);
          if(updatedItem) {
              updatedItem.balance = updatedItem.balance - element.qty;
          }



          firebase.firestore().collection(`items/${element.id}`)
          .doc().update(updatedItem)
          .then(res => console.log(res))
          .catch(err => console.log(err));
          })
        })
        .catch(err => {
          console.log(err)
        })
      return data;
   });

包.json

  "dependencies": {
    "firebase-admin": "^7.3.0",
    "firebase-functions": "^2.3.0"
   }

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


您不会返回在所有异步工作完全完成后解决的承诺。您需要获取从 update() 返回的所有 Promise,将它们推送到一个数组中,并在该数组上使用 Promise.all() 来生成一个新的 Promise,该 Promise 将在所有工作完成后解决。从函数中返回该承诺。

也可以看看:


推荐阅读