[英]jQuery deferred: create a chain sequence using conditions
我发现自己处于以下情况。 我需要进行3次异步调用:仅在完成call1后才触发call2,仅在完成call2之后才触发call3(我还需要使用jQuery的延迟对象)。
function call1() {
return $.ajax(...);
}
function call2() {
return $.ajax(...);
}
function call3() {
return $.ajax(...);
}
在这一点上没有什么复杂的,我可以只使用then()函数。
call1().then(call2).then(call3)
问题是有两个条件(cond2和cond3)将确定是否进行call2和call3。 如果我使用伪代码来描述它,它将看起来像这样:
if cond2
if cond3
call1().then(call2).then(call3)
else
call1().then(call2)
else
if cond3
call1().then(call3)
else
call1()
我知道我可以通过编写使用此结构的程序来解决问题,但这似乎并不正确。
我的问题是,如何使用jQuery的延迟对象以有效的方式解决此问题? 提前致谢!
这可能是您要寻找的:
var chain = call1();
if (cond2) chain = chain.then(call2);
if (cond3) chain = chain.then(call3);
return chain;
您可以这样做:
call1().then(cond2 ? call2 : null).then(cond3 ? call3 : null);
非函数null
将使承诺的值返回,因此链中的下一个then
回调将仍然获取承诺的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.