【发布时间】:2016-09-27 06:25:34
【问题描述】:
我是 next()、done() 等的新手,并且正在努力在串行执行/可能异步函数的链接之间传播参数。
我想强制串行执行 2 个函数,这样它们就可以用类似的方式调用:
f1('#{arg1a}', '#{arg1b}').done(
f2('#{arg2a}', '#{arg2b}')
);
或类似:
f1('#{arg1a}', '#{arg1b}', '#{arg2a}', '#{arg2b}').done(f2);
传入的 arg 值是使用 JSF 从查询参数中收集的。
注意:
arg2a和arg2b在我的情况下与arg1a和arg1b完全无关,f2的调用不会以任何方式取决于f1中发生的事情,其他它必须在之后严格执行,即使f1通常是异步的。-
我还没有在 done() 中定义即时匿名函数或类似的函数,我希望能够使用一些已知参数调用库定义的函数。
在本例中,函数类似于:
function f1(arg1a, arg1b) {
//do something with arg1a, arg1b
return $.Deferred().resolve();
}
function f2(arg2a, arg2b) {
// Do something with arg2a and arg2b AFTER f1 has fully run.
}
或类似:
function f1(arg1a, arg1b, arg2a, arg2b) {
//do something with arg1a, arg1b
// Somehow ensure f1 is finished then execute f2(arg2a, arg2b)
}
function f2(arg2a, arg2b) {
// Do something with arg2a and arg2b AFTER f1 has fully run.
}
仅使用回调链接不适用于我正在处理的情况。另见:How link to and target/open a p:tab within an p:accordionPanel within a p:tab within a p:tabview
一个可接受的答案必须允许我有一个带有预定义参数的预定义函数 f2
【问题讨论】:
-
return $.Deferred().resolve()没有意义,因为您正在同步调用 resolve,在这种情况下您甚至不需要处理此异步。您是否在f1中使用了异步函数? -
另外,您能否提供一个同步示例来说明您正在尝试做什么。类似于“如果这是同步的,我想这样做......”
标签: javascript jquery