2016-09-20 43 views
0
router.get('/getAllMeals',function(req,res){  

    var allMeals = []; 
    allMeals.push("foo"); 

    mealsRef.on("value",function(dataSnapShot){ 
     dataSnapShot.forEach(function(child){ 
      console.log(child.val()); 
      var oneMeal = child.val(); 
      allMeals.push(oneMeal); 
     }); 
    }); 

    allMeals.forEach(function(obj){ 
     console.log(obj); 
    }); 

    res.send(allMeals); 
}); //RETRIEVE ALL 

在上面的代码中,我无法将oneMeal这是一个有效的JSON对象添加到我创建的allMeals数组中。 console.log的结果只显示“foo”并且长度为1.Javascript列表对象无法添加JSON? Node.JS,Firebase

+0

我为您的代码提交了一个修复程序,您知道有一个额外的'});'? – jrbedard

回答

3

假设mealsRef.on("value",function(dataSnapShot){是有效的事件;需要在回调中调用您的res.send(allMeals);。基本上你的回应太快了。

+1

对于每个NodeJS开发人员来说,在异步编程上都是一个很好的阅读:[Callback Hell](http://callbackhell.com/)。 – qxz

+0

非常感谢您的阅读 – Hanson

+0

更好的开发模式是使用ES6承诺。使用Promise完全避免了“回拨地狱”。如果你还没有使用ES6,那么在NPM上可以使用NodeJS的polyfill。这是一个链接到polyfill。 https://github.com/stefanpenner/es6-promise –

0

只需在resassend后面datasnapshot.foreach内部回调,异步地狱是击败你。