我使用map来映射一组函数,如:
function runWaterfall(consumer, fns, cb) {
fns = fns.map(function (fn) {
return function () {
fn(consumer, arguments);
}
});
async.waterfall(fns, cb);
}
所以你可以看到,我想添加“consumer”作为每个函数fn的第一个参数,但我不相信我的语法是正确的。
也许这更好:
function runWaterfall(consumer, fns, cb) {
fns = fns.map(function (fn) {
return function () {
fn.apply(null,[consumer, arguments]);
}
});
async.waterfall(fns, cb);
}
我怀疑其中任何一个是正确的
答案 0 :(得分:1)
好问题!你几乎就在那里,只需要将类似数组的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);
}
答案 1 :(得分:1)
您不仅可以使用Function.prototype.bind
设置this
上下文,还可以提供参数。您与apply
关系密切,但它会立即调用该函数,而bind
将返回一个预填充参数的函数:
fns = fns.map(function (fn) {
return fn.bind( null, consumer )
});