2010-11-20 74 views
4

使用貓鼬,我希望在完成兩個不同的查詢後進行回調。在兩次異步查詢完成後使用貓鼬進行回調

 
var team = Team.find({name: 'myteam'}); 
var games = Game.find({visitor: 'myteam'}); 

那麼如何鏈接和/或包裝承諾內的這2個請求假設我想這些請求非阻塞和異步執行?

我想避免以下阻塞代碼:

 
team.first(function (t) { 
    games.all(function (g) { 
    // Do something with t and g 
    }); 
}); 

回答

12

我想你已經找到解決辦法,但無論如何。您可以輕鬆使用async庫。在這種情況下,您的代碼將如下所示:

async.parallel(
    { 
     team: function(callback){ 
      Team.find({name: 'myteam'}, function (err, docs) { 
       callback(err, docs); 
      }); 
     }, 
     games: function(callback){ 
      Games.find({visitor: 'myteam'}, function (err, docs) { 
       callback(err, docs); 
      }); 
     },      
    }, 
    function(e, r){ 
     // can use r.team and r.games as you wish 
    } 
); 
+0

非常好的答案 – 2015-10-03 23:06:25