0

我正在使用请求模块来下载报告。我正在使用 parallelLimit 方法来限制同时任务的数量。

迭代数组的代码是:

_.each(strs,function(str){
    _.each(experiences,function(selectedExperience){  
        asyncTasks.push(function(callback){
            downloadReport(name,inp.btime,inp.etime,selectedExperience,callback);
            });

        });
    });
});

异步任务功能的代码是:

 var downloadReport = function(Name,startTime,endTime,selectedExperience,callback){
    request.post({
                headers: myHeaders,
                uri: strurl,
                form: formObject,
                method: 'POST'
              }, function (err, res, body) {
              if(err){



        downloadReport(kpiName,startTime,endTime,selectedExperience,callback);            
                      }
                      else if(res)
                      {
                        if(body.indexOf("some string")>=0){
                              console.log("No records returned!!!");
                                callback(null,arr);                   
                          }
                          else if(!(body.indexOf("some string")>=0))
                          {     

                            var samp=body.substring(body.indexOf("\n")+1);

                            csv.fromString(samp, {headers: true})
                            .on("data",function(data){
                            arr.push(data);
                            })
                            .on("end",function(){ 
                                console.log("Array Length:",arr.length);
                                callback(null,arr);
                            });
                          }
                          else
                          {
                              //some code here
                                for (i=0;i<a.length;i=i+2){
                                    downloadReport(Name,a[i],a[i+1],selectedExperience,callback);//calling the same function
                                }
                          }
                      }
                  });

        }

异步并行限制的代码是

async.parallelLimit(asyncTasks,3,function(err, results){
    if(err) console.log(err);
    doSomething();
});

要求是在执行所有异步任务后仅调用一次 doSomething()。但我收到以下错误:

 if (fn === null) throw new Error("Callback was already called.");
               ^

在这种情况下如何只调用一次回调?

4

0 回答 0