我发现自己处于以下情况。我需要进行3次异步调用:call2仅在call1完成时触发,call3仅在call2完成时触发(我还需要使用jQuery中的deferred对象)。
function call1() {
return $.ajax(...);
}
function call2() {
return $.ajax(...);
}
function call3() {
return $.ajax(...);
}
此时没有什么复杂的,我可以使用then()函数。
call1().then(call2).then(call3)
问题是有2个条件(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中的延迟对象以有效的方式解决这个问题? 提前谢谢!
答案 0 :(得分:2)
这可能就是你要找的东西:
var chain = call1();
if (cond2) chain = chain.then(call2);
if (cond3) chain = chain.then(call3);
return chain;
答案 1 :(得分:2)
你可以这样做:
call1().then(cond2 ? call2 : null).then(cond3 ? call3 : null);
非函数null
将返回承诺的值,因此链中的下一个then
回调仍将获得承诺的值。