我使用eachSeries获得以下代码:
var allLetters = ["1", "2", "3", "4"];
async.eachSeries(allLetters, function(arrObj, callback){
saveAllToS3(arrMain, arrObj);
console.log("Reach here");
}, function (err){
console.log("callback is called");
if (err){
console.log(err);
} else {
console.log("Completed");
}
});
我看到saveAllToS3
只执行一次,并且没有调用回调(不调用“回调被调用”,也没有错误或打印出“已完成”)。
仅打印“到达此处”。
我想saveAllToS3会调用4次。首先,函数将以“0”调用,完成后,函数将以“1”调用,依此类推。
答案 0 :(得分:3)
async.*()
的要点是您传递的中间回调是异步 - 在调用callback
参数之前,它们不会被视为已完成。< / p>
由于您从未调用过回调,因此您的第一个回调永远不会完成。
答案 1 :(得分:3)
异步只能告诉它当前迭代完成时才能进入下一个输入项。您可以通过调用它为您的函数提供的回调来执行此操作:
var allLetters = ["1", "2", "3", "4"];
async.eachSeries(allLetters,
function(arrObj, done){
saveAllToS3(arrMain, arrObj);
console.log("Reach here");
done();
},
function (err){
console.log("callback is called");
if (err) {
console.log(err);
} else {
console.log("Completed");
}
});
我发现调用类似done
的回调参数可以使代码更明确。