您可以将参数传递给函数而不立即调用它吗?

Rya*_*ams 7 javascript jquery promise

我需要为pipe()处理函数提供一堆函数名称,以便它可以按顺序执行它们,等待每个函数的完成。这是伟大的,当这些功能不需要传递参数,但参数时,需要我无法弄清楚如何将它们传递无功能走在前面,并调用本身(所造成的括号内)。

例如,这是我通常通过的:

pipeHandler([function1, function2]);

然后它会在承诺完成之前调用function1()function2()

当我想做这样的事情时,它变得困难:

pipeHandler([function1('value'), function2]);

这会导致 function1() 立即调用,完全绕过承诺机制。

如果有帮助,这是处理程序函数:

function pipeHandler(requiredFunctions) {
    //Execute first required function
    var executeFunctions = requiredFunctions[0]();

    //Execute each subsequent required function using pipe()
    for ( var index = 1; index < requiredFunctions.length; index++ ) {
        executeFunctions = executeFunctions.pipe(requiredFunctions[index]);
    }

    //Execute allDone() using pipe()
    executeFunctions = executeFunctions.pipe(allDone);
}
Run Code Online (Sandbox Code Playgroud)

希望有人有想法!

Moe*_*eri 6

为什么不

pipeHandler([function() { function1('value'); }, function2]);
Run Code Online (Sandbox Code Playgroud)

?

这就是匿名函数闪耀的地方。如果您花一些时间在 Javascript 中工作,那么在某些时候使用 setTimeOut 时您可能会遇到同样的问题。


Ale*_*r R 5

这可以使用bind简洁地完成。句法:

pipeHandler([function1.bind(scope, 'value')]);
Run Code Online (Sandbox Code Playgroud)

Bind 返回一个偏函数应用程序,它是一个作用域中的新函数scope,具有固定的第一个参数'value'。它适用于任意数量的参数。