2012-12-09 119 views
1

我不understant如何在一個循環中設置回調:回調循環的node.js

models.chat_user.find({user_id: app.locals.session.user._id}, function(err, result){ 
    if(result.length < 1){ 
     chat.user = new models.chat_user({ 
     user_id: app.locals.session.user._id 
     }) 
     chat.user.save(); 
    } 
    models.chat_user.find(function(err, result){ 
     for(value in result){ 
     models.user.findOne({_id: result[value].user_id}, function(err, user){ 
       chat.users[value] = {}; 
       chat.users[value].username = user.username 
       chat.users[value].mail = app.locals.user.getAvatar(user.mail, 50); 
      }); 
     } 
    }) 
}); 

我想設置一個回調,當我發現在我環路所有提交的數據,但我不知道如何 mayme與上result.lenth的條件,但是,這不是很乾淨

感謝

回答

3

使用async.forEach像這樣:

models.chat_user.find(function(err, result){ 
    async.forEach(result, function(value, callback) { 
     models.user.findOne({_id: result[value].user_id}, function(err, user){ 
      chat.users[value] = {}; 
      chat.users[value].username = user.username 
      chat.users[value].mail = app.locals.user.getAvatar(user.mail, 50); 
      callback(err); 
     }); 
    }, topLevelCallback); 
}); 

topLevelCallback當所有forEach迭代都稱他們callback,沿着任何錯誤傳遞,如果有一個叫。

+0

它工作正常,謝謝:) – Ajouve