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,我可以获得所需的输出。 我试图使用回调来解决这个问题,但我无法解决。我还读到了关于promise对象的内容。你可以解释回调的概念,并帮助我用不同的可能解决方案解决这个问题。我也使用了settimeout函数,问题也没有解决。
如何使用回调返回数据以及如何使用它们
谢谢!
答案 0 :(得分:1)
最简单的命题,不使用promises或async模块:
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);
}
});
}
}
});
});