jQuery 延迟:使用条件创建链序列
jQuery deferred: create a chain sequence using conditions
我发现自己处于以下情况。我需要进行 3 个异步调用:call2 仅在 call1 完成时触发,call3 仅在 call2 完成时触发(我还需要使用 jQuery 中的延迟对象)。
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 中的延迟对象以有效的方式解决这个问题?
提前致谢!
这可能是您要找的:
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
回调仍然会得到承诺值。
我发现自己处于以下情况。我需要进行 3 个异步调用:call2 仅在 call1 完成时触发,call3 仅在 call2 完成时触发(我还需要使用 jQuery 中的延迟对象)。
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 中的延迟对象以有效的方式解决这个问题? 提前致谢!
这可能是您要找的:
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
回调仍然会得到承诺值。