jQuery延迟不按顺序调用解析/完成回调

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

我有两个jQuery Deferred对象。

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

也许我正在寻找一些延迟不提供的功能?


你需要做的是将你的所有请求与一个主延迟对象连接起来,并在你的承诺中注册所有的回调。 主延迟对象需要监听各个请求并相应地进行解析。 达到此目的的最简单方法是先定义所有延迟对象以避免鸡和鸡蛋问题:

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/

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


Adam,如果你通过“for”改变你的“setTimeout”,你可以看到它是按顺序执行的,setTimeout添加一个“trigger”来调用“另一个action”,这个“另一个action”在你指定的时间内执行,但setTimeout调用按顺序执行。

如果你不使用setTimeout,你的脚本将按顺序执行。

链接地址: http://www.djcxy.com/p/55389.html

上一篇: jQuery Deferred not calling the resolve/done callbacks in order

下一篇: try/catch blocks with async/await