我必须从存储在firebase中的一堆产品计算总价。由于在firebase中每个产品将单独退回,我怎么知道总计何时完全计算?
例如:
var total = 0;
firebaseApp.database().ref('/products/').once('value')
.then(function(snapshot) {
var product = snapshot.val();
total += product.price;
});
如果我有12个产品,只有在从数据库中检索到所有这些产品后才能返回总数,因此我无法使用变量total
,直到我确定所有的产品都被拿走了。
答案 0 :(得分:3)
我认为您应该重新构建数据,使其看起来像这样
products
-product1
-product2
-product3
.....
selected_products
user1:
-products_list:
-product2: true
-pruduct3: true
-product6: true
-total_price: 140
这样,您就不必担心在客户端计算价格了。只需在用户选择产品时加上价格即可。
如果那不是用例(用户选择产品),这意味着出于其他原因需要总价,那么这种方法将没有用处。
编辑:
如果您只需要计算所有产品的价格(不确定原因),您可以收听child_added事件:
var totalPrice = 0;
firebaseApp.database().ref(`/products/`).on('child_added', function(snapshot){
var product = snapshot.val();
totalPrice += product.price;
})
完成所有这些操作后,您应该拥有一个变量,其中所有产品的价格合并。
同样,你可以通过一次('值')调用获得相同的结果。
firebaseApp.database().ref(`/products/`).once('value', function(snapshot){
snapshot.forEach(function(productSnapshot){
totalPrice += productSnapshot.val().price;
})
})