我尝试了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();
})
答案 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的文档。 谢谢 最好的祝福 佩德罗·韦莱兹·席尔瓦