19

jQuery 的 Deferred/promise 有两种结果:resolved 和 denied。您可以将回调附加到与任一状态关联的 Deferred。附件的条件是完成(与已解决相关)、失败(与拒绝相关)和始终(与两种状态相关)。当状态从挂起变为非挂起时,我一直试图确定回调的顺序,但没有成功;即,对于done 和always(或fail 和always),对于resolved 和rejected 的每个状态,回调执行的顺序是什么?

4

2 回答 2

13

@Malcolm 的回答确实是正确的。文档在很多地方都提到了它,包括:


实施细节

查看Deferred 模块,它使用了实现 FIFO“回调列表”的回调模块。

这是用于将回调添加到 Deferred 对象的调用堆栈:

这是用于解析/拒绝 Deferred 对象的调用堆栈:

于 2015-09-20T17:33:16.247 回答
6

延迟对象按照将回调添加到延迟对象的顺序处理其回调。done()over没有优先级always(),反之亦然。resolved()无论您调用还是,行为都是相同的reject()

请参阅以下jsfiddle 示例

对原始问题的评论不正确,或者至少不完全正确。

于 2015-06-24T17:29:04.640 回答