无法弄清楚如何等待forEach循环完全迭代并使用该结果

时间:2018-11-24 21:29:38

标签: node.js firebase firebase-realtime-database

我是云功能的新手(带打字稿的节点js)。我正在使用它从Firebase数据库中获取数据(如下代码)。但是无法弄清楚如何等待forEach循环完全迭代并使用该结果。

  const reference = admin.database().ref('/books')
  var path_key:string
  var total_count:number = 0
  reference .forEach(function (snapshot) {
        path_key= snapshot(key).val()
         ref_users_advance_bookings.child(path_key) 
         .once('value').then((snapshot2)=>{

         if(condidtion met){
          return response.send("failed")
          }
          else{
           total_count++ 
           }
         )}

     return true 
    }) 
     // i want to use total_count value here
     return response.send("count :"+total_count) // but every time I gets 0, as it get executed before forEach has ended
   )}

1 个答案:

答案 0 :(得分:1)

我的猜测是,您正在尝试等待从数据库加载许多项目。为此,您需要使用Promise.all(),例如:

var promises = [];
ref.forEach(function (snapshot) {
    path_key= snapshot(key).val()
    promises.push(ref_users_advance_bookings.child(path_key).once('value'));
});

Promise.all(promises).then(function(snapshots) {
    var failed = false;
    snapshot.forEach(function(snapshot2) {
        if(condition met){
            failed = true;
        }
        else {
            total_count++;
        }
    )}
    if (failed) {
        return response.status(500).send("ERROR");
    }
    else {
        return response.send("count :"+total_count);
    }
});