jQuery.when( deferreds )返回: Promise
描述: 提供一种方法来执行零个或多个 Thenable(注:即带有 then 方法) 对象的回调函数, 通常是表示异步事件的 Deferred(延迟) 对象。
-
添加的版本: 1.5jQuery.when( deferreds )
-
deferreds零个或多个延迟对象,或者普通的JavaScript对象。
-
如果没有参数传递给 jQuery.when()
,它会返回一个resolved状态的Promise。
如果向 jQuery.when()
传入一个单独的延迟对象,那么会返回它的 Promise 对象(延迟方法的一个子集)。可以继续绑定 Promise 对象的其它方法,例如, defered.then
。当延迟对象已经被解决(resolved)或被拒绝(rejected)(通常是由创建延迟对象的最初代码执行的),那么就会调用适当的回调函数。例如,由 jQuery.ajax()
返回的 jqXHR 对象是一并立的延迟对象并且可以像下面这样使用:
1
2
3
|
|
如果一个参数被传递给jQuery.when()
, 并且它不是一个Deferred或Promise对象,
那么它会被当作是一个被解决(resolved)的延迟对象,并且绑定到上面的任何 doneCallbacks 都会被立刻执行。向 doneCallbacks 中传入的是原始的参数。在这种情况下,设定的任何 failCallbacks 永远都不会被执行,因为延迟对象永远不会被拒绝(rejected)。例如:
1
2
3
|
|
如果你不传递任何参数,
jQuery.when()
将返回一个resolved(解决)状态的promise对象。
1
2
3
|
|
在多个延迟对象传递给jQuery.when()
的情况下,该方法根据一个新的“宿主” Deferred(延迟)对象,跟踪所有已通过Deferreds聚集状态,返回一个Promise对象。当所有的延迟对象被解决(resolve)时,“宿主” Deferred(延迟)对象才会解决(resolved)该方法,或者当其中有一个延迟对象被拒绝(rejected)时,“宿主” Deferred(延迟)对象就会reject(拒绝)该方法。如果“宿主” Deferred(延迟)对象是(resolved)解决状态时, “宿主” Deferred(延迟)对象的 doneCallbacks (解决回调)将被执行。参数传递给 doneCallbacks提供这解决(resolved)值给每个对应的Deferreds对象,并匹配Deferreds传递给 jQuery.when()
的顺序。
例如:
1
2
3
4
5
6
7
8
9
10
|
|
如果没有值传递给 Deferred递延对象的解决(resolved)事件,
那么相应的doneCallback参数将是undefined
。
如果传递给Deferred递延对象的解决(resolved)事件为单个的值,
相应的参数将保留那个值。
在传递给Deferred递延对象的解决(resolved)事件为为多个值的情况下,
相应的参数将是这些值组成的数组。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
在多延迟情况下,如果Deferreds延迟对象一被拒绝(rejected),jQuery.when()
触发立即调用 “宿主” Deferred(延迟)对象的 failCallbacks。请注意在这个时间点上,有一些延迟对象仍然可以是未解决(unresolved)的。 传递给failCallbacks的参数匹配Deferred(延迟)对象的 failCallbacks被 rejected 拒绝的顺序。那么,在这种情况下,如果需要执行一些额外的处理,例如,取消所有未完成的 ajax 请求,你可以在闭包中进行保持 jqXHR 对象的引用,并且在 failCallback 中检查或取消它们。
例子:
Example: 执行Ajax请求后两个函数是成功的。(见jQuery.ajax()对于一个成功的和错误的案件为AJAX请求的完整描述文档)。
1
2
3
4
5
6
7
8
|
|
Example:
执行函数myFunc
当两个Ajax请求是成功的,如果任一或myFailure
有一个错误。
1
2
|
|