Javascript 添加新的第一个参数,然后应用原始参数
我使用map映射一组函数,如下所示:Javascript 添加新的第一个参数,然后应用原始参数,javascript,node.js,Javascript,Node.js,我使用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(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);
}
我怀疑这两个都是正确的好问题!您就快到了,只需要将类似数组的
参数
转换为数组,并使用消费者
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);
}
您不仅可以使用设置此
上下文,还可以提供参数。您已接近apply
,但它将立即调用该函数,而bind
将返回一个参数已预填充的函数:
fns = fns.map(function (fn) {
return fn.bind( null, consumer )
});
您有任何错误吗?或者输出是什么?不幸的是,这是一个更大的代码库的一部分,我还没有测试它:(
Apply
不会立即被调用,因为它在返回函数中。在您的示例中,您将consumer
作为第一个参数应用,但丢失了最后一个参数。@RubenNagoga您是对的,Apply
是从返回函数调用的。至于第二点:它可能是或可能不是期望的结果,很难用这么少的参数来判断问题中给出的上下文。