jQuery Deferred.then()不是';t在.fail()之后调用
我正在使用jQuery.Deferred并注册jQuery Deferred.then()不是';t在.fail()之后调用,jquery,jquery-deferred,Jquery,Jquery Deferred,我正在使用jQuery.Deferred并注册done、fail和然后处理程序: $.when( some_ajax(url) ) .done(function(result){}) .fail(function(){}) .then(function(){}); //just like that, with a single parameter 我发现,当我的ajax调用成功时,done和将按以下顺序调用回调。但是,当ajax失败时,会调用fail回调,但我无法访问t
done
、fail
和然后处理程序:
$.when( some_ajax(url) )
.done(function(result){})
.fail(function(){})
.then(function(){}); //just like that, with a single parameter
我发现,当我的ajax调用成功时,done
和将按以下顺序调用回调。但是,当ajax失败时,会调用fail
回调,但我无法访问then
回调
我已经阅读了jQuery.Deferred文档,但找不到有关此行为原因的提示
当使用始终
而不是然后
时,在成功和失败两种情况下都会调用它(首先调用完成
/失败
,然后调用始终
)。文档似乎没有指出始终
和然后
之间的预期差异。在我描述的场景中,为什么它们的行为不同?的语法是。然后()
,这就是为什么在成功的情况下都会调用,而在失败的情况下只会调用失败
在本例中,您只将一个回调传递给.then()
方法,它将被注册为成功回调,因此您有两个成功回调,一个注册为done()
,另一个注册为.then()
。但对于错误情况,只有一个回调注册到.fail()
如果您希望调用回调而不考虑成功/失败,那么使用调用then()
只处理成功,因此不处理失败案例是很正常的(我认为这是Arun p Johny在回答中说的)。或者你的意思是在你的实际代码中也将失败处理程序传递给then()
。@FrédéricHamidi谢谢,希望我的问题现在清楚了(编辑)它确实更清楚了,Arun的回答是正确的:你对then()
的调用只处理成功,而不是失败,因此,在失败的情况下,不调用处理程序是合乎逻辑的。现在投票表决太本地化!!!!我怀疑你的答案是正确的(我们需要提问者提供更多的信息来确定),但可能还不够清楚。我建议你试着澄清你所说的“成功”是什么意思,现在可以理解为“成功”和“失败”处理程序都被调用了,这是错误的。(顺便说一句,我试图抵消反对票,但你可能应该删除你之前的评论:这是多余的,可以被视为冒犯性的,对你的情况没有帮助)。@FrédéricHamidi可能是的,但我受够了一些疯狂的东西downvotes@FrédéricHamidi有时甚至会想到离开论坛,但有时我发现另一个答案被否决了,我也给出了同样的答案,并且被接受了。但是另一个用户被否决了