是否可以为async.series

时间:2018-11-15 23:53:36

标签: javascript async.js

我想每次使用async.series调用相同的异步函数,但使用不同的参数。我正在尝试通过动态生成如下所示的函数来做到这一点

function makeNotifications(notify,callback){
var functionContainer = [];
 function handler(arg){
    return function() { 
     //   log.debug("Notified ",arg); 
          sendmail(arg,function(maildata) {
        callback(null,arg);
            });
   }

}
for (var i = 0; i < notify.length; i++) {
    var currentArg = notify[i]; 
    log.debug("Notify ", currentArg);
       functionContainer.push(handler(currentArg));
  }
    //use async.series - 
        async.series( functionContainer, function(err,results){
           log.debug(results); 
       });
           callback(null,notify);
    }

这似乎不起作用。运行系列时不执行该功能。 functionContainer似乎包含NULL。有没有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

将回调传递给处理程序内的closure函数。由于async.js需要执行async functions的集合。

function makeNotifications(notify,parent_callback) {
let func_arr = [];
function handler(args) {
    return function(callback) {
        setTimeout(()=>{
            return callback(null,args);
        },2000);
    }
}
_.times(5,(item)=>{
    func_arr.push(handler(item));
});
console.log("function array : ",func_arr);
return async.series(func_arr,(err,data)=>{
    console.log("Final result : ",err?err:data);
    return parent_callback(null,notify);
});
}

makeNotifications([1,2,3],(err,data)=>{});

输出:

  

功能数组:[[功能],[功能],[功能],[功能],[功能]]

     

最终结果:[0,1,2,3,4]