代码示例:http : //jsfiddle.net/MhEPw/1/
我有两个jQuery Deferred对象。
我希望发生多个“异步”请求-在它们全部运行之后,我希望按指定的顺序运行回调(.done函数)。不幸的是,它们没有按顺序运行。
也许我在这里寻找Deferred无法提供的某些功能?
您需要做的是将您的所有请求链接到一个主延迟对象,并根据其承诺注册所有回调。延迟的主对象将需要侦听各个请求并相应地解决。实现此目的的最简单方法是预先定义所有延迟的对象,以避免出现鸡肉和鸡蛋问题:
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/
更改延迟对象定义的顺序是可能的,但这会使示例更加复杂。