如何将异步系列应用于此代码。。。我在查询和正确使用结果方面遇到了问题。。。我需要获取user.friendStatus,这是一个用户在朋友收藏中所有朋友的列表,然后,获取朋友的每个id,并从用户收藏中找到用户信息。。。
UPDATE:将async.series更改为async.waterfall,这样我就可以将一个结果传递给下一个函数。然而,我不确定你是如何把结果从一个传给另一个的。。。
这是我的代码:
exports.contactList = function(req, res) {
async.waterfall([
function(callback) {
var friends = [];
Friend.findOne({userId: req.signedCookies.userid}, function(err, users) {
if(err) {throw err};
for(var i = 0; i < users.friendStatus; i++) {
if(users.friendStatus[i].status === 3) { friends.push(users.friendStatus[i])};
}
});
callback(null, friends);
},
function(callback) {
var friendsinfo = [];
for(var i = 0; i < friends.length; i++) {
User.findbyID({_id: friends[i].fuID}, function(err, users) {
if (err) { throw err};
friendsInfo.push(users[i], friends[i].favorites);
});
}
callback(null, friendsinfo);
}
],
function(err, results) {
res.render('contactList', {title: 'Weblio', Friends: friendsinfo});
});
};
下面是来自https://github.com/caolan/async#waterfall我添加了更多的评论,让变得清晰
async.waterfall([
function(callback){
callback(null, 'one', 'two');
},
function(arg1, arg2, callback){
// arg1 is equal 'one'
// arg2 is equal 'two
callback(null, 'three');
},
function(arg1, callback){
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
// result now equals 'done'
});
[edit]应用于您的代码。。。(注意只是在第二个函数中添加好友参数)
[edit]更好的缩进,并在最后一次回调中将结果var更改为friendsinfo
exports.contactList = function(req, res) {
async.waterfall([
function(callback) {
var friends = [];
Friend.findOne({userId: req.signedCookies.userid}, function(err, users) {
if(err) {throw err};
for(var i = 0; i < users.friendStatus; i++) {
if(users.friendStatus[i].status === 3) { friends.push(users.friendStatus[i])};
}
});
callback(null, friends);
},
function(friends, callback) {
var friendsinfo = [];
for(var i = 0; i < friends.length; i++) {
User.findbyID({_id: friends[i].fuID}, function(err, users) {
if (err) { throw err};
friendsInfo.push(users[i], friends[i].favorites);
});
}
callback(null, friendsinfo);
}
],
function(err, friendsinfo) {
res.render('contactList', {title: 'Weblio', Friends: friendsinfo});
});
};