gpt4 book ai didi

jQuery ajax 延迟回调订单

转载 作者:行者123 更新时间:2023-12-03 22:51:58 25 4
gpt4 key购买 nike

我无法在延迟对象的回调之前执行每个 ajax 请求的完成/失败/始终回调。

我遇到的问题是我的一些ajax请求可能会失败,但无论一个失败还是没有失败,我都需要执行相同的代码。

很难准确解释,所以我做了这个 fiddle 来帮助展示我遇到的问题。 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 得到相同的结果。一旦一个请求被拒绝,它会在等待其他回调之前触发失败回调。

最佳答案

根据jQuery documentation $.when所有参数被解析或其中一个参数被拒绝时触发回调。那么使用类似的东西来代替 $.when 怎么样:

var custom_when = function() {
var args = $.makeArray(arguments);
var callback = args.pop();
var all = [];
$.each(args, function(index, def) {
def.always(function() {
var idx = all.indexOf(def);
if (idx !== -1) {
all.splice(idx, 1);
}
if (!all.length) {
callback();
}
});
all.push(def);
});
};

你可以这样使用它:

custom_when(a1, a2, a3, function() {
// do some stuff.
});

jsFiddle demo .

关于jQuery ajax 延迟回调订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com