我在开网店。当从购物车中删除产品时,必须触发一个firebase函数来重新计算购物车中剩余的所有文件的新总价。
export const onProductDelete = functions.database
.ref(`/orders/{userID}/{orderID}/products/{productID}`)
.onDelete(async (snapshot, context) => {
...
})
当一个产品被删除(手动在Firebase实时数据库 Jmeter 板或编程),firebase函数被调用,但价格不会得到更新,因为产品的数量是相同的(?).
我在函数中记录了产品数组,结果如下:
products: [
,
{ test: 'test' },
,
,
{ test: 'test' }
]
被删除的产品在数据库中不可见,但被逗号替换,并且仍被计为产品(对象)
有人知道发生了什么吗?
更新额外信息
完全firebase函数
export const onProductDelete = functions.database.ref(`/orders/{userID}/{orderID}/products/{productsID}`).onDelete(async (snapshot, context) => {
try {
const userID = context.params.userID;
const orderID = context.params.orderID;
const productID = context.params.productID;
const orderSnapshot = await admin.database().ref(`orders/${userID}/${orderID}`).once('value');
const orderData = orderSnapshot.val();
console.log('products: ', orderData.products); // products: [, { test: 'test' }, , , { test: 'test' }]
const amountOfProducts = orderData.products.length;
const newSubTotal = amountOfProducts * 100; //Fixed product price for example
const taxes = newSubTotal * 0.10; //Fixed tax of 10% for example
const total = newSubTotal + taxes;
return admin.database().ref(`orders/${userID}/${orderID}/price`).set({ amountOfProducts, subTotal: newSubTotal, taxes, total });
} catch(error) {
console.log('Error in onProductDelete: ', error);
return null;
}
});
1条答案
按热度按时间wh6knrhe1#
问题似乎来自于您将一组产品编写为数组的事实。当你在云函数中读取数组时(当数组的一个值被删除时触发),
once()
方法返回的数组是不正确的,例如;[, { test: 'test' }, , , { test: 'test' }]
而不是[{ test: 'test' }, { test: 'test' }]
如果你把产品集写成一个对象,你会得到一个正确的
products
对象。您可以使用
update()
方法来编写products
对象,让Firebase为产品生成唯一的ID。