在循环node.js中callback
我不明白如何在循环中设置callback:
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); }); } }) });
当我在循环中find所有数据时,我想设置一个callback函数,但是我不知道如何使用result.lenth的条件,但这不是很干净
谢谢
像这样使用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); });
当所有的forEach
迭代都调用它们的callback
函数时,会调用topLevelCallback
,如果有错误则传递任何错误。