我想每次使用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。有没有更好的方法可以做到这一点?
答案 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]