2017-09-07 48 views
0

answerDataArrayという空の配列を宣言し、値を配列にプッシュしました(値はfirebase DBのスナップショットです)。私が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

あなたの問題は、おそらくので、あなたが言及したのforEach後の値の行を持つことを期待することはできません、answerDataRef.child(key).once("value", function(snapAnswerData){非同期であるという事実です。

おそらくPromiseを使用して、非同期値を返すことができます。

+0

どうすればいいですか? – venkatesh

+0

この関数をPromiseベースに変換する必要があります。こちらをご覧ください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise – felixmosh

関連する問題