Node.js /为什么async.eachSeries不调用回调?

时间:2014-08-10 13:00:48

标签: javascript node.js

我使用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”调用,依此类推。

2 个答案:

答案 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的回调参数可以使代码更明确。