Обратный вызов Async.ParallelLimit уже вызван

Я использую модуль запроса для загрузки отчетов. Я использую метод 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.");
               ^

Как перезвонить только один раз в этой ситуации?

0 ответов

Другие вопросы по тегам