NodeJS异步:已经调用了回调?

时间:2014-06-27 22:37:11

标签: javascript node.js asynchronous

我在Node.JS中使用Async模块来跟踪我的异步调用。但是,我收到错误 - "已经调用了回调。" 有人可以帮帮我吗?

async.each(data['results'], function(result, done) { 
    if (result['twitter_id'] !== null) { //Isolate twitter handle
        var param = { "user.screen_name": result['twitter_id']}
        db.test4.find( param, function(err, users) {
            if( err ) {
                return done(err);
            } else if (!users) {
                res.send("No user found");
            } else {
                users.forEach( function(Result) { 
                    twitter_ids.push(Result);
                    //console.log(Result);
                    done();
                });
            }
        });
    }
}, function(err) {  
    if (err) {
        throw err
    }
    res.send(twitter_ids);
});

1 个答案:

答案 0 :(得分:11)

你正在呼叫res.send(“找不到用户”);每次加载失败。但是,您可能无法多次加载。

解决方案是将所有响应代码放在最终回调中,而不是放在每个回调中。

async.each(data['results'], function(result, done) { 
    if (result['twitter_id'] !== null) { //Isolate twitter handle
        var param = { "user.screen_name": result['twitter_id']}
        db.test4.find( param, function(err, users) {
            if( err ) {
                done(err);
            } else if (!users) {
                done(new Error("No user found"));
            } else {
                users.forEach( function(Result) { 
                    twitter_ids.push(Result);
                    //console.log(Result);
                });
                done();
            }
        });
    } else {
      done();
    }
}, function(err) {  
    if (err) {
        return next(err);
    }
    res.send(twitter_ids);
});