小编典典

jQuery Deferred没有按顺序调用resolve / done回调

ajax

代码示例:http :
//jsfiddle.net/MhEPw/1/

我有两个jQuery Deferred对象。

我希望发生多个“异步”请求-在它们全部运行之后,我希望按指定的顺序运行回调(.done函数)。不幸的是,它们没有按顺序运行。

也许我在这里寻找Deferred无法提供的某些功能?


阅读 261

收藏
2020-07-26

共1个答案

小编典典

您需要做的是将您的所有请求链接到一个主延迟对象,并根据其承诺注册所有回调。延迟的主对象将需要侦听各个请求并相应地解决。实现此目的的最简单方法是预先定义所有延迟的对象,以避免出现鸡肉和鸡蛋问题:

var d1 = $.Deferred();
var d2 = $.Deferred();
var def = $.when(d1, d2);

def.done(function() {
    alert(1);
});
setTimeout(function() {
    d1.resolve();
}, 3000);

def.done(function() {
    alert(2);
});
setTimeout(function() {
    d2.resolve();
}, 1000);

小提琴:http//jsfiddle.net/pVVad/

更改延迟对象定义的顺序是可能的,但这会使示例更加复杂。

2020-07-26