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)
希望有人有想法!
为什么不
pipeHandler([function() { function1('value'); }, function2]);
Run Code Online (Sandbox Code Playgroud)
?
这就是匿名函数闪耀的地方。如果您花一些时间在 Javascript 中工作,那么在某些时候使用 setTimeOut 时您可能会遇到同样的问题。
这可以使用bind简洁地完成。句法:
pipeHandler([function1.bind(scope, 'value')]);
Run Code Online (Sandbox Code Playgroud)
Bind 返回一个偏函数应用程序,它是一个作用域中的新函数scope,具有固定的第一个参数'value'。它适用于任意数量的参数。