Deferred对象

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

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

deferred对象的方法

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

    参考资料

  • jQuery.Deferred

  • jQuery的deferred对象详解
  • 读jQuery之二十(Deferred对象)

原文: https://leohxj.gitbooks.io/front-end-database/content/jQuery/deferred-object.html