Node.js:forEach在async.series中

And*_*rea 2 javascript foreach json asynchronous node.js

我开始开发我的node.js应用程序,但我不能"想到异步".在我的函数中,我必须进行查询,并且对于每一行,我必须执行另一个查询来计算最终结果并创建我的json.我试着这样做:

async.series([
    function(callback) {
            db.myCannedResponseList(req.params.websiteid, function(err,questions) {
                if (err) return callback(err);
                ...
                callback();
            });
        },
    function(callback) {
            async.forEachSeries(temp,function(quest,callback) {
                    db.getCannedAnswer(quest.id, function(err,answers) {
                         console.log(answers);
                    });
            }, function(err) {
                if (err) return next(err);
            });
            callback();
        }
    ],
        function(err) { 
            if (err) return next(err);
            res.json(output);
    });
Run Code Online (Sandbox Code Playgroud)

但是有一个问题:getCannedAnswer的结果是在res.json(输出)之后显示的.我怎么解决呢?

rob*_*lep 5

完成后需要调用回调forEachSeries.您还需要调用传递给forEachSeries处理函数的回调:

async.forEachSeries(temp, function(quest, callback2) {
  db.getCannedAnswer(quest.id, function(err, answers) {
    console.log(answers);
    // call the callback for forEachSeries so it can proceed:
    callback2(); 
  });
}, callback); // forEachSeries is done here, call the callback for async.series
Run Code Online (Sandbox Code Playgroud)

  • 或许可以通过`callback`代替匿名`函数(错误)`.它将`throw`在`return next(err);`因为`next`在那里不存在(除非它在给定的片段之外定义). (2认同)