Async.eachOfSeries没有循环

时间:2017-08-28 11:03:20

标签: node.js async-await

我尝试了aysnc.eachOfSeries,但代码没有循环。它在第一次迭代中停止执行并冻结。我想我在返回回调时犯了一些错误。

我也尝试在else块中放置一个回调但是给回调已经调用了错误。

这个async.eachOfSeries嵌套在另外一个eachOfSeries中。

async.eachOfSeries(data, function (value2, val, callback) {
    let jsonObj = data[val];
    let email = jsonObj.ToEmail;
    jsonObj['retailer'] = res[camp].retailer;
    jsonObj['summary'] = 'f';
    let tempObj = {};
    tempObj[id] = jsonObj;
    let options = { new: true};
    let campId = id;
    User.addCampaignResponse(email, campId, tempObj, options, function (err, results) {
        if (err) {
                 throw err;
        } else {
            console.log("gets printed once");
            Campaign.updateResponse(_id, function (err, results2) {
                if (err)
                    throw err;
                else {
                    console.log("Gets printed once");
                    callback(); //tried this but gives callback already called error
                    }
                }) // console.log(results);
            }
        })
    }, function (err) {
        console.log("Doesn't print");
            callback();
  })

3 个答案:

答案 0 :(得分:2)

你必须像这样使用它:

//async.eachOfSeries(data, function (value2, val, callback) { => wrong
async.eachOfSeries(data, function (value2, callback) {
    //
})

答案 1 :(得分:0)

它应该以这种方式工作。

如果发生错误,则在您的情况下发生。它运行您提供的最终回调函数。

链接: - https://caolan.github.io/async/docs.html#eachOfSeries

  

当所有iteratee函数完成时调用的回调,   或者发生错误。用(错误)调用。

答案 2 :(得分:0)

如果其他人点击此线程,我想把它留在这里。 问题是在最后的可选回调中:

    }, function (err) {
        console.log("Doesn't print");
        callback();
   });

您正在调用迭代器回调,而不是外部回调。 在代码的上下文中,您可能会将异步包含在其他函数中,该回调是您应在最后的异步可选回调上调用的回调。或者只是不使用可选功能,但不要在结束循环后让它通过迭代器回调。

您还应该测试错误,例如:

}, function(err){
  if(err){
    debug('Something went wrong in async: ' +err);
    outerCallback(err, somethingIfitsthecase);
  }else{ 
    outerCallback(null, somethingIfitsthecase);
  }
});

按照Parth Acharya的建议检查caolan的文档。 谢谢 最好的祝福 佩德罗·韦莱兹·席尔瓦