2013-08-12 85 views
0

如何将异步系列应用于此代码...我正在查询并正确使用结果时遇到问题...我需要将user.friendStatus列出,这是所有朋友的列表在朋友集合中,然后获取朋友的每个ID并从用户集合中找到用户信息...应用异步nodejs

更新:将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的一个例子,我增加更多评论要我说清楚

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'  
}); 

[编辑]应用到您的代码......(注意只是加好友参数去第二个功能)

[编辑]更好地缩进和变化导致无功在过去回调

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}); 
}); 

}到friendsinfo;