由于asynchronousnodejs,无法将数据添加到数组中

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的asynchronous工作,我无法获得所需的输出。 在请求获取请求之后数组是空的,在array.push(events)的范围内使用console.log,我能够获得所需的输出。 我试图用callback来解决这个问题,但是我没有办法。 我也读了关于承诺的对象。 你能解释callback的概念,并帮助我用不同的可能的解决scheme来解决这个问题。 我也用settimeout函数,问题也没有解决。

如何使用callback返回数据以及如何使用它们

谢谢 !

最简单的命题,不使用承诺或asynchronous模块:

 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); } }); } } }); });