从嵌套的foreach获取数据

时间:2017-06-06 08:22:41

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

我正在使用firebase和Node.js构建应用程序。我需要从嵌套的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); // {}

});

};

1 个答案:

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

});

...