jQuery的延迟/承诺有两个结果:已解决并被拒绝.您可以将回调附加到与每个状态相关联的Deferred.完成附件的条件(与解决相关联),失败(与拒绝关联),并始终(与两个状态相关联).当状态从未决状态移动到非挂起时,我没有成功地尝试确定回调的顺序;即对于完成和永远(或者失败并总是),回调对于每个被解决和被拒绝的状态执行的顺序是什么?
解决方法
@马尔科姆的回答确实是正确的.该文档在许多地方都提到,其中包括:
> deferred.done()
和deferred.fail()
– “回调按照添加的顺序执行”.
> deferred.always()
– “当Deferred被解决或拒绝时,回调按照添加的顺序执行”
> jQuery.ajax()
– “Promise callbacks – .done(),.fail(),.always()和.then() – 按照注册顺序被调用.
实施细节
看看Deferred module,它使用实现FIFO“回调列表”的Callbacks module.
> always()
> list.push()
– 回调函数是pushed到列表的末尾.
这里是用于解析/拒绝Deferred对象的调用堆栈:
> Callbacks.fire()
– 列表中的回调使用a for
loop以FIFO顺序执行.