我最近一直在尝试学习firebase云函数,并编写了一个http,其中包含itemName、sellerUid和quantity。然后我有一个后台触发器(onWrite(,它用提供的sellerUid和itemName找到Item Price,计算总数(Item Price*Quantity(,然后将其写入firestore中的文档。
我的问题是:
根据我现在的情况,假设我的客户购买了N件商品,这意味着我将拥有:
-
N次读取(从N个项目的价格搜索(,
-
2次写入(一次初始写入用于N个项目,1次写入用于计算后的总量(,
-
N个来自云功能的搜索
我不太确定云函数如何计算读写以及它所需的计算时间(尽管它都只是文本,但应该可以忽略不计?(
我很想听听你对我所拥有的是否已经足够好的想法,或者有没有更有效的方法来实现这一点。
谢谢!
exports.itemAdded = functions.firestore.document('CurrentOrders/{documentId}').onWrite(async (change, context) => {
const snapshot = change.after.data();
var total = 0;
for (const [key, value] of Object.entries(snapshot)) {
if (value['Item Name'] != undefined) {
await admin.firestore().collection('Items')
.doc(key).get().then((dataValue) => {
const itemData = dataValue.data();
if (!dataValue.exists) {
console.log('This is empty');
} else {
total += (parseFloat(value['Item Quantity']) * parseFloat(itemData[value['Item Name']]['Item Price']));
}
});
console.log('This is in total: ', total);
}
}
snapshot['Total'] = total;
console.log('This is snapshot afterwards: ', snapshot);
return change.after.ref.set(snapshot);
});
根据您当前的方法,您将收到以下账单:
- N个读数(从N个项目的价格搜索中(
- 1个触发
onWrite
功能的写入 - 1次写入,该写入保持总值
我能想到的一种更好的方法是比较change.before.data()
和change.after.data()
中的值列表的大小,读取当前的总值(如果这是第一次,则为0(,然后只添加change.after.data()
中添加的值,而不是N个值,这可能会导致您的读取次数减少。
对于实际定价,如果你查看本文档中的云功能,你会发现在你的案例中,只有调用和计算计费适用于你的案例,但两者都有一个免费层,所以如果你使用它只是为了学习,而这个应用程序没有太多用途,你应该使用这两种方法。
如果你需要更多信息,请告诉我。