jQuery 1.83前的异步列队与Deferred对象详解

0 下载量 48 浏览量 更新于2024-09-02 收藏 115KB PDF 举报
"jQuery1.83之前的异步列队相关模块详解" 在jQuery的发展历程中,1.5版本是一个重要的里程碑,因为在这个版本中引入了 Deferred 对象,它是一种处理异步操作的机制,旨在简化异步编程。尽管最初 Deferred 是内置于核心模块中的,但在1.5.2版本中,它被单独作为一个模块划分出来,使得其功能更加明确和易于使用。 Deferred 对象提供了一种方式来管理多个异步操作,确保它们按照一定的顺序执行。它包含了几个关键的方法,这些方法允许开发者对异步列队进行控制和监控: 1. **_Deferred**:这是一个工厂方法,用来创建一个新的 Deferred 对象。由于它的状态和相关联的函数是私有的,所以只能通过 Deferred 对象提供的接口来操作。 2. **done()**:这个方法用来注册一组成功回调函数,当 Deferred 对象被解决(即 resolve 或 resolveWith 被调用)时,这些函数会被依次执行。 3. **resolveWith()** 和 **resolve()**:这两个方法用于标记 Deferred 对象的状态为已解决,从而触发 done 回调函数的执行。resolveWith 允许你指定一个作用域,而 resolve 则默认使用当前作用域。 4. **isResolved()**:此方法检查 Deferred 对象是否已经被解决,即 resolve 或 resolveWith 是否已经被调用过。 5. **fail()**:类似于 done(),但它是用于注册失败回调函数的,当 Deferred 对象被拒绝(即 reject 或 rejectWith 被调用)时,这些函数会被执行。 6. **rejectWith()** 和 **reject()**:这两个方法用来标记 Deferred 对象为已拒绝,从而触发 fail 回调函数的执行。同样,rejectWith 允许你指定执行回调函数的作用域。 7. **always()**:无论 Deferred 对象是成功解决还是被拒绝,这个方法都会执行注册的回调函数。 8. **then()**:这是 done 和 fail 的组合,可以同时注册成功和失败的回调函数。 9. **progress()**:用于在 Deferred 对象的生命周期中添加进度回调函数,通常用于通知异步过程的中间状态。 jQuery 的 Deferred 对象受到 Python 中 Twisted 框架的启发,并且在 MochiKit 和 Dojo 等其他 JavaScript 库中也有类似的概念。然而,jQuery 对其进行了改造,以避免直接复制原有设计,并引入了自己的命名约定,尽管这导致了一些API的混乱。例如,Dojo 中的 addBoth、addCallback、addErrback 在 jQuery 中对应的是 then、done 和 fail。 此外,jQuery 的 `when()` 方法是一个强大的工具,它可以用于合并多个 Deferred 对象,确保它们按照指定的顺序执行,或者在所有 Deferred 都完成时执行一个回调。这在处理多个异步操作时特别有用,可以避免回调地狱,使代码更清晰、更易于维护。 jQuery 1.83 之前的异步列队模块,通过 Deferred 对象及其相关方法,为开发者提供了优雅地处理异步编程的途径,提升了代码的可读性和可维护性。虽然它的 API 可能不如后来的版本直观,但对于那个时期的 jQuery 开发者来说,它是一个非常重要的进步。
2017-11-05 上传