我正在使用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/

07-28 06:16