1

我不明白如何在循环中设置回调:

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

当我在循环中找到所有数据时,我想设置一个回调,但我不知道 result.lenth 的条件如何,但这不是很干净

谢谢

4

1 回答 1

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,如果有错误则传递任何错误。

于 2012-12-09T19:25:49.487 回答