我无法在延迟对象的回调之前执行每个 ajax 请求的完成/失败/始终回调。
我遇到的问题是我的一些 ajax 请求可能会失败,但是无论一个失败还是没有一个失败,我都需要执行相同的代码。
很难准确解释,所以我做了这个小提琴来帮助说明我遇到的问题。 http://jsfiddle.net/zZsxV/
var a1 = $.Deferred();
var a2 = $.Deferred();
var a3 = $.Deferred();
a1.done(function() {
$('body').append('a1 done<br />');
}).fail(function() {
$('body').append('a1 fail<br />');
}).always(function() {
$('body').append('a1 always<br />');
});
a2.done(function() {
$('body').append('a2 done<br />');
}).fail(function() {
$('body').append('a2 fail<br />');
}).always(function() {
$('body').append('a2 always<br />');
});
a3.done(function() {
$('body').append('a3 done<br />');
}).fail(function() {
$('body').append('a3 fail<br />');
}).always(function() {
$('body').append('a3 always<br />');
});
var def = $.when(a1, a2, a3);
def.always(function() {
$('body').append('defer always <-- should be after all<br />');
});
setTimeout(function() {
a1.resolve();
}, 5000);
setTimeout(function() {
a2.reject();
}, 1000);
setTimeout(function() {
a3.resolve();
}, 3000);
我阅读了很多关于这个主题的答案,但我不相信任何完全符合我的需要。
任何需要帮助的信息,请告诉我,我会在回来后添加。提前致谢。
编辑
我明白发生了什么。我只知道如何避免这个问题。我也尝试使用 .then 并获得相同的结果。一旦一个请求被拒绝,它会在等待其他回调之前触发失败回调。