Javascript Mongoose函数外的空数组
我试图使用mongoose模式从多个集合中检索数据,然后以JSON格式发送响应。这是我写的代码Javascript Mongoose函数外的空数组,javascript,node.js,mongodb,mongoose,mean-stack,Javascript,Node.js,Mongodb,Mongoose,Mean Stack,我试图使用mongoose模式从多个集合中检索数据,然后以JSON格式发送响应。这是我写的代码 function GetConnections_V2(req,res){ Connection.find({"user_id":"55006c36c30f0edc5400022d"}) .exec(function(err,connections){ var list = []; var obj = new Object(); c
function GetConnections_V2(req,res){
Connection.find({"user_id":"55006c36c30f0edc5400022d"})
.exec(function(err,connections){
var list = [];
var obj = new Object();
connections.forEach(function(connection){
obj.friend_id = connection.user_id_friend;
User.findById(connection.user_id_friend)
.exec(function(err,user){
if(user !== null) {
obj.friend_email = user.email;
obj.friend_details_id = user.details;
UserDetail.findById(user.details).exec(function (err, details) {
obj.firstname = details.firstname;
obj.lastname = details.lastname;
obj.image = details.image;
list.push(obj);
});
}
});
});
});
console.log(list);
res.send(list);
};
现在开始执行这段代码。它正在返回空数组。如何解决此问题?您正在for循环内部调用异步函数。这就是为什么列表是空的 您可以使用async来解决此问题
var async = require('async');
function GetConnections_V2(req,res){
Connection.find({"user_id":"55006c36c30f0edc5400022d"})
.exec(function(err,connections){
var list = [];
async.each(connections, function(connection, callback){
var obj = new Object();
obj.friend_id = connection.user_id_friend;
User.findById(connection.user_id_friend)
.exec(function(err,user){
if(user !== null) {
obj.friend_email = user.email;
obj.friend_details_id = user.details;
UserDetail.findById(user.details).exec(function (err, details) {
obj.firstname = details.firstname;
obj.lastname = details.lastname;
obj.image = details.image;
list.push(obj);
callback();
});
} else {
callback();
}
});
}, function(err){
return res.send(list);
});
};
}
希望对您有所帮助。您正在for循环内部调用异步函数。使用异步lib或promise@mukeshharma我该怎么做?事实上,我是新来的。非常感谢你我是新来的。您能解释一下异步和exec函数是如何工作的吗?您可以在这里阅读异步编程