无法计算 Firebase 云触发函数中的新旧值差异



此云函数扫描一个集合中的新条目,并调整另一个集合的数据。

来自我的orders集合的信息将与它们的匹配引用字段一起发送到cars集合。然而,这个问题出现在更新数据的第二个函数上,当调整运输成本时,它会用更新的数量而不是它们之间的差异来减少totalSales,这意味着shippingCost的减法比它应该的要多。

我尝试过实现change.before.data,但没有成功。

代码本身是:

exports.useWildcard = functions.firestore
.document('orders/{docId}')
.onCreate((change, context) => 
{
var tasks = new Promise((resolve, reject) => {
admin.firestore().collectionGroup('cars').where("carRef","==",change.data().sku).get().then(documents => {
docID = '';
documents.forEach((doc) => {                  
docID = doc.id;
totalSales = 0;
orderPrice = 0;
shippingCost = 0;
if(typeof doc.data().totalSales != "undefined")
totalSales = parseFloat(doc.data().totalSales);                        
if(typeof change.data().orderPrice != "undefined")
orderPrice = parseFloat(change.data().orderPrice);                        
if(typeof change.data().shippingCost != "undefined")
shippingCost = parseFloat(change.data().shippingCost);
newTotalSales = totalSales-shippingCost;
admin.firestore().collection('cars').doc(docID).update({"totalSales":newTotalSales}).then(documents => {
resolve();
});
});
if(docID=='') resolve();
});
});
return tasks;                       
}
);

问题是totalSales按照代码中的指示减去运输成本,但一些订单可能会进行进一步的运输成本调整,从而产生一个新的价值扣除问题。在这种情况下,我想在totalSales字段中减去或添加shippingCost差异。

我认为您应该在订单集合中使用onWriteEvent,而不是onCreate事件,这样您就可以访问change.before.data();change.after.data();

  • change.before.data();将帮助您访问以前的值,而不是减去新值

如果您需要更多信息,请检查此项。

最新更新