前端工程师手册

Deferred对象

jQuery提供一个静态方法Deferred,返回一个可供链式调回调函数队列。为的是解决异步编程问题,遵循Common Promise/A规范。jQuery在1.5版本中引入了这个特性,并为其重写了Ajax模块,可见其重要性。

它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。

deferred对象的方法

  1. $.Deferred() 生成一个deferred对象
  2. deferred.done() 指定操作成功时的回调函数
  3. deferred.fail() 指定操作失败时的回调函数
  4. deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
  5. deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。
  6. deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。
  7. $.when() 为多个操作指定回调函数
  8. deferred.then(): 把done和fail结合写在一起了,传递两个回调函数即可。
  9. deferred.always(): 这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。

参考资料