3

是否可以将其他参数或参数传递给async.EachSeries

方法签名是:EachSeries(arr, iterator, callback)

我有一种方法可以将电子邮件收件人与邮件模板异步合并

var mergeTemplate = function(template,recipients,callback){

  async.EachSeries(recipients,processMails,callback);

};

var processMails = function(template,singleRecipient,callback){
   //...this would contain an async.waterfall of tasks to process the mail
   async.waterfall(tasks,callback);
}

我需要的是在不使用“脏”全局变量的情况下通过模板...这可能吗?如果可以,如何?

谢谢

4

1 回答 1

6

您可以使用.bind在不使用全局变量的情况下传入模板:

var mergeTemplate = function(template, recipients, callback){
    async.eachSeries(recipients, processMails.bind(processMails, template), callback);
};

bind()方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前具有给定的参数序列。

所以processMails.bind(processMails, template)创建了一个新函数,this设置为processMails,这个新函数的第一个参数是template

这相当于(但不那么冗长)processMails直接调用如下:

var mergeTemplate = function(template, recipients, callback){
    async.eachSeries(
      recipients, 
      function(){
         return processMails(template);
      }, 
      callback);
};
于 2013-10-29T21:18:01.750 回答