jQuery.Deferred()

jQuery.Deferred( [beforeStart ] )返回类型:Deferred

描述: 一个工厂函数,返回一个可前缀的实用工具对象,带有向回调函数队列注册多个回调函数的方法,调用回调函数队列,并延迟任何同步或异步函数的成功或失败状态。

jQuery.Deferred()工厂函数创建了一个的应答对象。

jQuery.Deferred方法可以传给它一个可选的函数,会在返回该方法之前调用该函数;传给该函数的第一个参数,以及它的this对象是新建的deferred对象。被调用的函数可以使用deferred.then()方法附加回调函数,例如:

一个延迟对象在挂起状态开始。利用deferred.then()deferred.always()deferred.done()deferred.fail()方法把任何回调函数添加到对象,都会队列等待以后执行。调用deferred.resolve()deferred.resolveWith()把延迟对象转换到已解决状态,并立即执行任何已设置的doneCallbacks。调用deferred.reject()deferred.rejectWith() 把延迟对象转换为已拒绝状态,并立即执行任何已设置的failCallbacks。一旦对象已经进入解决状态或拒绝状态,它会停留在该状态中。已解决或已拒绝的延迟对象依然可以添加回调函数——它们会立即被执行。

利用jQuery Deferred启用回调函数

在JavaScript中,通常调用函数,视情况接受回调函数,在函数内部调用它。例如,在jQuery 1.5以前的版本中,匿名处理,譬如jQuery.ajax()接受一些回调函数,在不久的未来,ajax请求成功、出错、完成时调用这些回调函数。

jQuery.Deferred()方法为管理和调用回调函数的方式引入了一些增强。特别是,jQuery.Deferred()提供了灵活的方式,以提供多个回调函数,这些回调函数可被调用,无论原来的回调函数派遣是否已经发生。jQuery的延迟对象基于CommonJS Promises/A设计。

一种理解延迟对象的模型是,把它想象成一个有链意识的函数包装器。deferred.then(), deferred.always()方法、deferred.done(), and deferred.fail()方法指定了要被调用的函数,deferred.resolve(args)方法或deferred.reject(args)方法用你提供的参数“调用”函数。一旦延迟对象已经被解决或已经被拒绝,它会停留在那种状态;举个例子,以后调用deferred.resolve(),会被忽略。再举个例子,如果在延迟对象已经被解决之后,通过deferred.then()方法添加了多个函数,就会立即用先前提供的参数调用它们。

在大多数情况下,如果某个jQuery API调用返回一个延迟对象或一个应答兼容对象,譬如jQuery.ajax()jQuery.when(),你将只想要使用deferred.then()deferred.done()deferred.fail()方法来把回调函数添加到延迟对象的队列。API的内部调用,或创建延迟对象的代码,将在延迟对象上某一点上调用deferred.resolve()deferred.reject(),导致相应的回调函数运行。