Rakesh Kumar
Rakesh Kumar

Reputation: 79

Not able to figure out how to wait until forEach loop iterates completely and use that result

I am new to cloud functions (node js with typescript). I am using it to fetch data from Firebase database( as the code below). But Not able to figure out how to wait until forEach loop iterates completely and use that result.

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

Upvotes: 0

Views: 179

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 600141

My guess is that you're trying to wait for a number of items to load from the database. For that you'll want to use Promise.all(), in something like:

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

Upvotes: 1

Related Questions