繁体   English   中英

jQuery延迟:使用条件创建链序列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM