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反復で their が呼び出されたときに呼び出されcallback、エラーがあった場合はエラーを渡します。

于 2012-12-09T19:25:49.487 に答える