У меня возникла ситуация, когда мне нужно запустить запрос mongodb из кода nodejs (expressjs) и передать результат запроса в ответ на запрос моего веб-api, но перед моим запрос выполняет следующие строки кода, который выполняется, и пустой ответ отправляется обратно. Код, который я написал, как следует,Последовательное выполнение кода nodejs с запросом mongodb
router.get('/recent', function (req, res){
var result = [];
router.db.collection('Posts').find({},{ _id : 1, uid : 1, imagePath : 1, cntLikes : 1, uploadDate : 1}).limit(5).sort({ uploadDate : -1 }).toArray(function(err, docs) {
docs.forEach(function (doc){
router.db.collection('Users').findOne({ "_id" : mongodb.ObjectId(doc.uid)}, function (err, user){
doc.username = user;
result.push(doc);
});
});
res.send(result); // this line send empty result to caller
});
});
Я попытался методы обратного вызова, async.waterfall и программно остановить выполнение, но все потерпели неудачу. Я также пробовал обещания, но я не думаю, что обещания могут помочь мне в этом сценарии.
Хотя @ subburaj Ответит чище IMO –