2017-06-06 9 views
0

Ich baue eine App mit Firebase und Node.js. Ich muss Daten von verschachtelten foreach bekommen. Wie mache ich das richtig? Müssen die Ergebnisse aller Iterationen gleichzeitig zurückgeben.Erhalte Daten von verschachtelten foreach

exports.userParty = function (userInfo, cb) { 

var userID = userInfo.userID; 
var clubID = userInfo.clubID; 

var refUserParty = ref.child(userID).child('my_party_id'); 

var party = {}; 

refUserParty.orderByValue().once("value", function (snapshot) { 

    var party = {}; 

    snapshot.forEach(function (partyID) { 

     var refParty = dbb.ref('clubs').child(clubID).child('party').child(partyID.val()); 

     refParty.once('value', function (partyBody) { 
      party[partyID.val()] = partyBody.val(); 
      //console.log(party); 
     }); 

    }); 
    cb(party); // {} 

}); 

}; 
+0

Was versuchen Sie zu tun? Rufen Sie den Callback mit dem Objekt 'partyBody' in' refParty.once (... 'block? – dan

+0

auf. Wenn ja, sollten Sie' cb (party) 'in die Zeile verschieben, in der Sie' //console.log(party) ' – dan

+0

In diesem Fall bekomme ich nur das erste Iterationsergebnis, ich muss die Ergebnisse aller Iterationen gleichzeitig zurückgeben –

Antwort

1

Sie müssen den Rückruf rufen, nachdem alle Asynchron-Funktionen im forEach Block abgeschlossen haben. Sie können dies tun, indem Sie einen einfachen Zähler verwenden, um zu überprüfen, ob alle asynchronen Funktionen abgeschlossen sind:

Verwandte Themen