应用异步 nodejs
Posted
技术标签:
【中文标题】应用异步 nodejs【英文标题】:Applying async nodejs 【发布时间】:2013-08-13 09:43:03 【问题描述】:如何将异步系列应用于此代码...我在查询和正确使用结果时遇到问题...我需要获取 user.friendStatus ,它是用户在朋友集合,然后,获取朋友的每个 id 并从用户集合中找到用户信息......
更新:将 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);
);
;
【问题讨论】:
【参考方案1】:这是来自https://github.com/caolan/async#waterfall 的 async.waterfall 示例,我添加了更多 cmets 让我清楚
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]更好的缩进,并在最后一个回调中将结果变量更改为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);
);
;
【讨论】:
以上是关于应用异步 nodejs的主要内容,如果未能解决你的问题,请参考以下文章