2017-06-06 16 views
0

私はfirebaseとNode.jsを使用してアプリケーションを構築しています。ネストされたforeachからデータを取得する必要があります。どのように正しく行うには?すべての反復の結果を同時に返す必要があります。ネストされた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

何をしようとしていますか? 'refParty.once(...' block? – dan

+0

)の中の 'partyBody'オブジェクトを使ってコールバックを呼び出す' cb(party) 'を現在' //console.log(party ) ' – dan

+0

この場合、最初の反復結果しか得られません。すべての反復の結果を同時に返す必要があります。 –

答えて

1

あなたはforEachブロック内のすべての非同期関数が完了した後にコールバックを呼び出す必要があります。シンプルなカウンタを使用して、すべての非同期関数が完了したことを確認することができます。

... 

let completedSnapshots = 0; 

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(); 
     completedSnapshots++; 
     if (completedSnapshots === snapshot.val().length) { 
      cb(party); 
     } 
    }); 

}); 

... 
関連する問題