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回调仍然会得到承诺值。