2015-11-07 28 views
1
api.get('/getfavourites',function(req,res) { 


    var userid = req.param('userid'); 
    array = []; 


    User.findById({_id: userid}, function (err, users) { 
     if (err) { 
      res.send(err); 
      return; 
     } 
     else { 



      var i; 
      var length = users.favouriteid.length; 


      for (i = 0; i < length; i++) { 


       var temp = {eid: users.favouriteid[i].eventid}; 


       Event.findById({_id: temp.eid}, function (err,events) { 
        if (err) { 
         res.send(err); 
         return; 
        } 
        else { 

         array.push(events); 


        } 
       }); 

      } 

     } 

    }); 

    console.log(array); 

    res.json(array); 

}); 

由于nodejs的异步工作,我无法获得所需的输出。在请求获取请求之后数组是空的,在array.push(events)范围内使用console.log的地方,我能够获得所需的输出。 我试图用回调来解决这个问题,但我无法做到。我也读了关于承诺对象。你能否解释一下回调的概念,并用不同的可能解决方案来帮助我解决这个问题。我也使用了settimeout函数,问题也没有解决。无法将数据添加到阵列,因为异步nodejs

如何使用数据回调和如何使用它们

感谢回报!

不使用承诺或异步模块的

回答

1

最简单的命题:

api.get('/getfavourites',function(req,res) { 
    var userid = req.param('userid'); 
    array = []; 
    User.findById({_id: userid}, function (err, users) { 
    if (err) { 
     res.send(err); 
     return; 
    } 
    else { 
     var i; 
     var length = users.favouriteid.length; 
     for (i = 0; i < length; i++) { 
     var temp = {eid: users.favouriteid[i].eventid}; 
     Event.findById({_id: temp.eid}, function (err,events) { 
      if (err) { 
      res.send(err); 
      return; 
      } 
      else { 
      array.push(events); 
      } 
      if(array.length === length){//it is true when all events are pushed 
      console.log(array); 
      res.json(array); 
      } 
     }); 
     } 
    } 
    }); 
}); 
+1

它的工作非常感谢 –