node.js - 每当使用 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"
}
解决方案
您不会返回在所有异步工作完全完成后解决的承诺。您需要获取从 update() 返回的所有 Promise,将它们推送到一个数组中,并在该数组上使用 Promise.all() 来生成一个新的 Promise,该 Promise 将在所有工作完成后解决。从函数中返回该承诺。
也可以看看:
推荐阅读
- python-3.x - 在 Alembic 后期处理中修改 ForeignKeyConstraint 模式
- c# - 调试时将元素添加到集合中(Visual Studio)
- swift - 如何从此函数中获取索引
- java - 在多 APK 支持的情况下,如何检查 APK 的更新版本是否与我的设备兼容的 API 级别
- windows - 批处理文件以根据文件名创建文件夹和移动文件
- spring - 如何从表单传递 onchange 值:选择到控制器
- c# - 如何在 C# 中验证数字签名
- google-play - Google Play 中的“需要测试登录”应用审核
- java - Spring data jpa 未能在 db2 的本机子查询中传递命名参数
- onnxruntime - 加载 ONNX 模型失败:ShapeInferenceError