Firebase:删除后节点被逗号替换

irtuqstp  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(119)

我在开网店。当从购物车中删除产品时,必须触发一个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;
  }
});
wh6knrhe

wh6knrhe1#

问题似乎来自于您将一组产品编写为数组的事实。当你在云函数中读取数组时(当数组的一个值被删除时触发),once()方法返回的数组是不正确的,例如; [, { test: 'test' }, , , { test: 'test' }]而不是[{ test: 'test' }, { test: 'test' }]
如果你把产品集写成一个对象,你会得到一个正确的products对象。
您可以使用update()方法来编写products对象,让Firebase为产品生成唯一的ID。

相关问题