如何在所有承诺结算后进行回调?

时间:2014-02-14 06:35:14

标签: javascript jquery promise

我正在使用jquery进行承诺。

我有一个场景,我有两个承诺。

如果promise1拒绝或解决,则system1应分别拒绝或解决。

如果promise2拒绝或解决,system2应该解决。

在两者结算并且system1和system2都已解决后,应调用函数X.

我试过了:

var dp = $.when(promise1, promise2);
dp.done(function(one,two){
     X();
}).fail(function(){
  // promise1 might have not settled as of yet.
    Should call X or not ?
});

但是只要其中一个承诺失败,它就会返回。所以我的promise1在调用失败时没有得到解决。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

行为完全符合文档:您的问题的答案也在文档中 italised

  

在多个Deferreds案例中,其中一个Deferreds被拒绝,   jQuery.when立即为其master发出failCallbacks   递延。请注意,某些延迟可能仍未解决   那一点。 如果您需要为此执行其他处理   如果取消任何未完成的ajax请求,你可以保留   对闭包中的底层jqXHR对象的引用   在failCallback中检查/取消它们。