将额外的parameter passing给asynchronous映射

async.map的签名是map(arr,iterator,callback)( https://github.com/caolan/async#map )

我有一个var context //object ,我需要传递给迭代器。 我该怎么做呢 ?

您可以通过两种方式使用绑定:

 iterator.bind(context) 

这将使迭代器函数中的context可用。

另一种方法是创build一个部分函数:

 iterator.bind(null, context) 

这将使context可用作为迭代器函数的第一个参数。 所以,而不是迭代iterator(item, callback)的迭代器签名,它成为iterator(context, item, callback)

简单演示:

 // first: async.map([1, 2, 3], function(item, callback) { callback(null, item * this.mult); }.bind({ mult: 5 }), function(err, results) { console.log('R', results); }); // second: async.map([1, 2, 3], function(ctx, item, callback) { callback(null, item * ctx.mult); }.bind(null, { mult: 5 }), function(err, results) { console.log('R', results); }); 

使用箭头function,您可以咖喱您的function,并传递额外的参数:

 async.map([1,2,3], context => (item, callback) => { // you now have access to context, item, and callback here }, (err, results)=>{ // async.map callback function }); 

我喜欢把我的function放在asynchronous函数之外,以保持干净:

 const processItem = context => (item, callback) => { // process items here }; async.map([1,2,3], processItem(context)(item, callback), (err, results)=>{ // async.map callback function });