每当使用Firebase函数创建另一个集合中的另一个文档时,如何从一个集合中更新文档?

时间:2019-04-29 16:50:26

标签: node.js firebase google-cloud-firestore google-cloud-functions

因此,无论何时创建新销售,我都试图更新项目余额,因此我正在侦听该销售的创建,并获取所有项目以检查新销售和项目之间的匹配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;
   });

package.json

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

1 个答案:

答案 0 :(得分:0)

您不会返回一个承诺,当所有异步工作完全完成后,该承诺就会解决。您需要接受从update()返回的所有promise,将它们推入数组,然后在该数组上使用Promise.all()生成一个新的promise,该promise将在所有工作完成后解决。从函数返回那个承诺。

另请参阅: