Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合来自firebase数据库的值_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 聚合来自firebase数据库的值

Javascript 聚合来自firebase数据库的值,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我必须计算储存在firebase中的一堆产品的总价格。由于在firebase中,每种产品都将单独返回,我如何知道何时完全计算出总数 例如: var total = 0; firebaseApp.database().ref('/products/').once('value') .then(function(snapshot) { var product = snapshot.val(); total += product.price; }); 如果我有12个产品,那么只有在从

我必须计算储存在firebase中的一堆产品的总价格。由于在firebase中,每种产品都将单独返回,我如何知道何时完全计算出总数

例如:

var total = 0;
firebaseApp.database().ref('/products/').once('value')
.then(function(snapshot) {
    var product = snapshot.val();
    total += product.price;
});

如果我有12个产品,那么只有在从数据库检索到所有这些产品后才能返回总数,因此在我确定所有产品都已检索到之前,我不可能使用变量
total

我认为您应该重新构造数据,使其看起来像这样

products
    -product1
    -product2
    -product3
     .....

selected_products
    user1:
       -products_list:
            -product2: true
            -pruduct3: true
            -product6: true
       -total_price: 140
这样,您就不必担心在客户端计算价格。用户选择产品时,只需将价格相加即可

如果这不是用例(用户选择产品),这意味着您出于其他原因需要总价,那么这种方法将没有帮助

编辑:

如果您只需要计算所有产品的价格(不确定原因),您可以收听child_添加的事件:

var totalPrice = 0;
firebaseApp.database().ref(`/products/`).on('child_added', function(snapshot){
    var product = snapshot.val();
    totalPrice += product.price;
})
当所有这些都完成后,您应该有一个变量,其中包含所有产品的价格值

类似地,您可以通过一次('value')调用获得相同的结果


我认为您应该重新构造数据,使其看起来像这样

products
    -product1
    -product2
    -product3
     .....

selected_products
    user1:
       -products_list:
            -product2: true
            -pruduct3: true
            -product6: true
       -total_price: 140
这样,您就不必担心在客户端计算价格。用户选择产品时,只需将价格相加即可

如果这不是用例(用户选择产品),这意味着您出于其他原因需要总价,那么这种方法将没有帮助

编辑:

如果您只需要计算所有产品的价格(不确定原因),您可以收听child_添加的事件:

var totalPrice = 0;
firebaseApp.database().ref(`/products/`).on('child_added', function(snapshot){
    var product = snapshot.val();
    totalPrice += product.price;
})
当所有这些都完成后,您应该有一个变量,其中包含所有产品的价格值

类似地,您可以通过一次('value')调用获得相同的结果


你是对的。我建议将总价保存到一个额外的节点。这样你就不必等着知道总价了,你是对的。我建议将总价保存到一个额外的节点。这样你就不必等待知道总价格是多少。不幸的是,我需要将数据库中所有产品的价格相加,因此这不会解决我的问题,但无论如何,谢谢。不幸的是,我需要将数据库中所有产品的价格相加,因此这不会解决我的问题,但无论如何,谢谢