jQuery源码分析-05异步队列 Deferred
5.异步队列Deferred
5.1 概述
异步队列是一个链式对象,增强对回调函数的管理和调用,用于处理异步任务。
异步队列有三种状态:初始化(unresolved),成功(resolved),失败(rejected)。
执行哪些回调函数依赖于状态。
状态变为成功(resolved)或失败(rejected)后,将保持不变。
回调函数的绑定可以是同步,也可以是异步的,即可以在任何时候绑定。
(本节中的 绑定 注册 增加 具有相同的含义)
5.2 关键方法
先看看jQuery. Deferred()中的关键方法
分类 |
方法 |
说明 |
增加 |
deferred.done() |
增加成功回调函数 状态为成功(resolved)时立即调用 |
deferred.fail() |
增加失败回调函数 状态为失败(rejected)时立即调用 |
|
deferred.then() |
增加成功回调函数和失败回调函数到各自的队列中 便捷方法,两个参数可以是数组或null 状态为成功(resolved)时立即调用成功回调函数 状态为失败(rejected)时立即调用失败回调函数 |
|
|
deferred.always() |
增加回调函数,同时增加到成功队列和失败队列 状态已确定(无论成功或失败)时立即调用回调函数 |
执行 |
deferred.resolve() |
调用成功回调函数队列 通过调用deferred.resolveWith()实现 |
deferred.resolveWith() |
使用指定的上下文和参数执行成功回调函数 |
|
deferred.reject() |
调用失败回调函数队列 通过调用deferred.rejectWith()实现 |
|
deferred.rejectWith() |
使用指定的上下文和参数执行失败回调函数队列 |
|
其他 |
deferred.isRejected() |
判断状态是否为成功(resolved) |
deferred.isResolved() |
判断状态是否为失败(rejected) |
|
deferred.pipe()
|
每次调用回调函数之前先调用传入的成功过滤函数或失败过滤函数,并将过滤函数的返回值作为回调函数的参数 最终返回一个只读视图(调用promise实现) |
|
deferred.promise() |
返回deferred的只读视图 |
接下来将会jQuery._Deferred和jQuery.Deferred的源码详细剖析。