Firebase:节点在删除后会被逗号取代



我正在做一个网上商店。从购物车中删除产品时,必须触发 Firebase 函数来重新计算购物车中剩余所有文件的新总价。

export const onProductDelete = functions.database
.ref(`/orders/{userID}/{orderID}/products/{productID}`)
.onDelete(async (snapshot, context) => {
...
})

删除产品后(在 Firebase 实时数据库信息中心手动或以编程方式删除),系统会调用 Firebase 函数,但价格不会更新,因为产品数量相同(?)。

我在函数中记录了产品数组,结果如下:

products: [
  ,
  { test: 'test' },
  ,
  ,
  { test: 'test' } 
]

已删除的产品在数据库中不可见,但会替换为逗号,并且仍计为产品(对象)

有人知道发生了什么吗?

使用额外信息进行更新

完整的火力基地功能

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;
  }
});

问题似乎来自您将一组产品编写为数组的事实。当你在云函数中读取数组时(删除数组的值时触发),once()方法返回的数组不正确,例如; [, { test: 'test' }, , , { test: 'test' }]而不是[{ test: 'test' }, { test: 'test' }]

如果您将商品系列编写为对象,您将获得正确的products对象。

您可以使用 update() 方法编写对象products让 Firebase 为产品生成唯一 ID。

相关内容

  • 没有找到相关文章

最新更新