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

Adding new first argument, then applying original arguments

本文关键字:参数 然后 应用 原始 添加 第一个      更新时间:2023-09-26

>我正在使用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);
}

我怀疑这些中的任何一个都是正确的

您不仅可以使用 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);
}
相关文章: