我正在使用map映射一组函数,如下所示:
function runWaterfall(consumer, fns, cb) {
fns = fns.map(function (fn) {
return function () {
fn(consumer, arguments);
}
});
async.waterfall(fns, cb);
}
如您所见,我想在每个函数fn中添加“ consumer”作为第一个参数,但是我认为我的语法不正确。
也许这样更好:
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/