推送值后返回空数组

时间:2017-09-07 05:03:41

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

我已经声明了一个名为 answerDataArray 的空数组,并将值推送到数组中(值是来自firebase数据库的快照)。当我可以在 console.log(answerDataArray) 循环之外使用forEach时,它会显示一个空数组,但当我在console.log(answerDataArray)循环内的任何位置forEach时,我会得到填充数组。请告诉我这里发生了什么。

var ideationContestRef = ideationDataRef.child(contestDataRef.key);
    ideationContestRef.once("value", function(snapshot){
        if(snapshot.child("answers").exists()){
            snapshot.child("answers").ref.once("value", function(snapAnswerKey){
                var answerKey = Object.keys(snapAnswerKey.val());
                var answerDataRef = db.ref("answerData");
                var answerDataArray = [];
                answerKey.forEach(function(key){
                    answerDataRef.child(key).once("value", function(snapAnswerData){
                        answerDataArray.push(snapAnswerData.val());
                    });
                });
                console.log(answerDataArray);
                // res.render("ideation", {id: contestId, layout: 'styled.handlebars', page: 'ideation', user_logged_in: user_presence, contestData: snapshot.val(), answerDataArray: answerDataArray});
            });

        } 

1 个答案:

答案 0 :(得分:1)

您的问题可能是answerDataRef.child(key).once("value", function(snapAnswerData){ 异步这一事实,因此您不能指望在您提到的forEach之后有值。

也许你可以使用Promise来返回异步值。