【问题标题】:Is it possible to dynamically create array of functions for async.series是否可以为 async.series 动态创建函数数组
【发布时间】:2023-03-14 06:00:01
【问题描述】:

我想每次使用 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。有没有更好的方法来实现这一点?

【问题讨论】:

    标签: javascript async.js


    【解决方案1】:

    将回调传递给处理程序内的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 ]

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2021-04-25
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多