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(),最后总是执行。
参考资料