添加新的第一个参数,然后应用原始参数
我正在使用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 ) });
好问题! 你几乎在那里,只需要将数组类似的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); }