Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使在推送值之后也会返回空数组_Javascript_Node.js_Firebase Realtime Database - Fatal编程技术网

Javascript 即使在推送值之后也会返回空数组

Javascript 即使在推送值之后也会返回空数组,javascript,node.js,firebase-realtime-database,Javascript,Node.js,Firebase Realtime Database,我声明了一个名为answerDataArray的空数组,并将值推送到数组中(值是来自firebase DB的快照)。当我可以使用console.log(answerDataArray)在forEach外循环时,它会显示一个空数组,但当我使用console.log(answerDataArray)时,在forEach循环内的任何地方我都会得到填充的数组。请告诉我这里发生了什么 var ideationContestRef = ideationDataRef.child(contestDataRef

我声明了一个名为
answerDataArray
的空数组,并将值推送到数组中(值是来自firebase DB的快照)。当我可以使用
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});
            });

        } 

您的问题可能是
answerDataRef.child(key).once(“value”,function(snapAnswerData){
async,因此您不能期望在前面提到的forEach之后有值行


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

能否演示如何执行此操作?您需要将函数转换为基于Promise的函数,您可以在此处阅读,