2014-02-14 62 views
0

我正在使用jQuery的承诺。如何在所有承诺解决后执行回调?

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

如果promise1拒绝或解决,那么system1应分别拒绝或解析。

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

函数X应该在两者都解决并且system1和system2都解决后调用。

我想:

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在我的失败被调用的时候没有解决。

我该怎么做?

+0

您希望两个承诺都能运行结果,并且在两个完成后都想运行X()方法。这是你想要的吗? –

+0

@Basha请参阅编辑的问题。我真的想让X被称为iff promise1已解决,但只有在两个承诺都已解决之后。 –

回答

0

该行为完全按照文档:您的问题的答案也在文档中为斜体

在多Deferreds情况下Deferreds之一被拒绝, jQuery.when立即触发对于其主站的failCallbacks 推迟。请注意,有些延迟仍可能在 这一点上没有解决。 如果您需要对此 大小写进行额外处理,例如取消所有未完成的ajax请求,您可以在关闭时保留 对底层jqXHR对象的引用,并且在failCallback中检查/取消它们。

+0

我试过“当”为我的解决方案,但无法应用它。可能是错的。我对承诺很陌生。 “什么时候”行为正确,我并不矛盾。我想知道我如何解决我的问题(有或没有)? –

+0

[fiddle](http://jsfiddle.net/rD4bE/)给出了一个例子..你可以在你的'fail'回调中调用'req2.abort()'。 – jacquard

相关问题