添加新的第一个参数,然后应用原始参数

我正在使用map来映射一组函数,如下所示:

function runWaterfall(consumer, fns, cb) { fns = fns.map(function (fn) { return function () { fn(consumer, arguments); } }); async.waterfall(fns, cb); } 

所以,你可以看到,我想添加“消费者”作为每个函数fn的第一个参数,但我不相信我的语法是正确的。

也许这是更好的:

 function runWaterfall(consumer, fns, cb) { fns = fns.map(function (fn) { return function () { fn.apply(null,[consumer, arguments]); } }); async.waterfall(fns, cb); } 

我怀疑这些是否正确

您可以使用Function.prototype.bind不仅设置this上下文,而且提供参数。 你已经接近apply ,但它会立即调用该函数,而bind将返回一个函数与预填充参数:

 fns = fns.map(function (fn) { return fn.bind( null, consumer ) }); 

https://jsfiddle.net/qmuv8com/

好问题! 你几乎在那里,只需要将数组类似的arguments转换为数组,并与consumer

 function runWaterfall(consumer, fns, cb) { fns = fns.map(function (fn) { return function () { var args = Array.prototype.slice.call(arguments, 0); fn.apply(null, [consumer].concat(args)); } }); async.waterfall(fns, cb); }