我正在做非常简单的请求从MongoDB获取一些数据,然后将它们发送到我的视图
router.get('/', isAuthenticated, function(req, res) {
Conversation.findAllConversation(req.user._id, function(err, data) {
if (err) return console.error(err); // handle this
var array = [];
data.forEach(function (element, index, array){
ConversationReply.findLastReply(element._id, function(err, replys) {
if(err) return cosole.log(err);
console.log(replys);
array.push(replys);
});
});
console.log(array);
res.render('messages/index', {
title : 'Messages',
conversations: data,
user: req.user,
lastReplys: array });
});
});
但是来自回复的所有数据都没有推送到我的阵列然后只是发送空。 Console.log(回复)正确显示我的所有回复。
答案 0 :(得分:1)
findLastReply
异步返回,而请求函数正在同步进行。要解决这个问题,我会做这样的事情:
router.get('/', isAuthenticated, function(req, res) {
Conversation.findAllConversation(req.user._id, function(err, data) {
if (err) return console.error(err); // handle this
var array = [];
data.forEach(function (element, index, array){
ConversationReply.findLastReply(element._id, function(err, replys) {
if(err) return cosole.log(err);
console.log(replys);
array.push(replys);
if (array.length === data.length) {
// we are done! :D
console.log(array);
res.render('messages/index', {
title : 'Messages',
conversations: data,
user: req.user,
lastReplys: array });
}
});
});
});
});
更好的是使用Promises,但这不是必需的。