jQuery.Deferred( [beforeStart ] )返回类型:Deferred
描述: 一个工厂函数,返回一个可前缀的实用工具对象,带有向回调函数队列注册多个回调函数的方法,调用回调函数队列,并延迟任何同步或异步函数的成功或失败状态。
-
增补版本:1.5jQuery.Deferred( [beforeStart ] )
-
beforeStart在构造器返回之前调用的函数。
-
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()
,导致相应的回调函数运行。