这是我的代码段。
我试图获取我的friends.friendsList的详细信息驻留在用户集合本身,并在那里插入用户的ID。所以首先我获取userId,然后获取他们的每个细节。但我的问题是我没有在friendsDetails
函数之外得到fetchDetails
的值。我试了很多次。我是节点和帆js的新手。我认为它的异步执行问题。我怎么解决这个问题?
getFriendsDetails:function(req,res){
var userId = req.param('id');
var friendsDetails=[];
User.findOne({
id: userId
}).exec(function(err,user){
var friendsIds=user.friends;
friendsIds.forEach(function(id){
User.findOne({
id: id
}).exec(function fetchDetails(err,Userdetails){
var obj={
id:Userdetails.id,
name:Userdetails.name,
pro_pic:Userdetails.profile_pic
}
friendsDetails.push(obj);
console.log(friendsDetails);//Here consoling pushed data correctly.
});
console.log(friendsDetails);//here i am getting null array
});
});
答案 0 :(得分:0)
您可以使用mongoDB $in
子句获取朋友文档数组。
getFriendsDetails:function(req,res){
var userId = req.param('id');
var friendsDetails=[];
User.findOne({
id: userId
}).exec(function(err,user){
var friendsIds = user.friends;
User.find({id : { $in : friendsIds}}).toArray(function(err, data){
console.log(data);
data.forEach(function(friendObj){
var obj={
id: friendObj.id,
name: friendObj.name,
pro_pic: friendObj.profile_pic
}
friendsDetails.push(obj);
});
console.log(friendsDetails);
});
});
}
答案 1 :(得分:0)
您的变量不在同一范围内。因此,它在exec函数之外为null。你是对的,这是由于javascript的异步性质。
您可以做的是将回调传递给exec函数并将变量传递给。
.exec(function(err, user, callback)
然后像这样调用它
callback(friendsDetails);
你的第二个console.log不会等到你的功能完成,因为它是异步的。