用法
jQuery.when( deferreds ) => Promise
jQuery.when( deferreds ) => Promise
说明:提供一种基于零个或多个 Thenable 对象执行回调函数的方法,通常延期表示异步事件的对象。
-
添加的版本:1.5
jQuery.when( deferreds )
-
deferreds零个或多个 Thenable 对象。
-
如果没有参数传递给 jQuery.when()
,它将返回一个已解决的 Promise。
如果将单个 Deferred 传递给 jQuery.when()
,则该方法将返回其 Promise 对象(Deferred 方法的子集)。可以调用 Promise 对象的其他方法来附加回调,例如
。当 Deferred 被解决或拒绝时,通常是由最初创建 Deferred 的代码,适当的回调将被调用。例如deferred.then
jQuery.ajax()
返回的jqXHR对象是Promise-compatible对象,可以这样使用:
|
如果将单个参数传递给 jQuery.when()
并且它不是 Deferred 或 Promise,它将被视为已解决的 Deferred,并且任何附加的 doneCallbacks 都将立即执行。 doneCallbacks 传递原始参数。在这种情况下,您可能设置的任何 failCallbacks 都不会被调用,因为 Deferred 永远不会被拒绝。例如:
|
如果您根本不传递任何参数,jQuery.when()
将返回一个已解决的承诺。
|
在将多个 Deferred 对象传递给 jQuery.when()
的情况下,该方法从一个新的 "master" Deferred 对象返回 Promise,该对象跟踪已传递的所有 Deferred 的聚合状态。该方法将在所有 Deferred 解析后立即解析其主 Deferred,或者在其中一个 Deferred 被拒绝时拒绝主 Deferred。如果 master Deferred 已解决,则执行 master Deferred 的 doneCallbacks。传递给 doneCallbacks 的参数提供了每个 Deferred 的解析值,并与 Deferred 传递给 jQuery.when()
的顺序相匹配。例如:
|
如果 Deferred 在没有值的情况下被解析,则相应的 doneCallback 参数将未定义。如果 Deferred 解析为单个值,则相应的参数将保存该值。在 Deferred 解析为多个值的情况下,相应的参数将是这些值的数组。例如:
|
在其中一个 Deferred 被拒绝的 multiple-Deferreds 情况下,jQuery.when()
立即为其主 Deferred 触发 failCallbacks。请注意,此时某些 Deferreds 可能仍未解决。传递给 failCallbacks 的参数与被拒绝的 Deferred 的 failCallback 签名匹配。如果您需要针对这种情况执行额外的处理,例如取消任何未完成的 Ajax 请求,您可以在闭包中保留对底层 jqXHR 对象的引用,并在 failCallback 中检查/取消它们。
例子:
两次ajax请求成功后执行一个函数。 (有关 ajax 请求的成功和错误案例的完整说明,请参阅 jQuery.ajax() 文档)。
|
当两个ajax请求都成功时执行函数myFunc
,如果其中一个有错误则执行myFailure
。
|
相关用法
- JQuery jQuery.inArray()用法及代码示例
- JQuery Mobile jQuery.mobile.path.get()用法及代码示例
- JQuery jQuery.grep()用法及代码示例
- JQuery Mobile jQuery.mobile.navigate()用法及代码示例
- JQuery Mobile jQuery.mobile.path.isRelativeUrl()用法及代码示例
- JQuery jQuery.dequeue()用法及代码示例
- JQuery jQuery.escapeSelector()用法及代码示例
- JQuery Mobile jQuery.mobile.silentScroll()用法及代码示例
- JQuery jQuery.cssNumber用法及代码示例
- JQuery jQuery.map()用法及代码示例
- JQuery jQuery.readyException()用法及代码示例
- JQuery jQuery.parseJSON()用法及代码示例
- JQuery jQuery.contains()用法及代码示例
- JQuery Mobile jQuery.mobile.path.makePathAbsolute()用法及代码示例
- JQuery jQuery.each()用法及代码示例
- JQuery jQuery.unique()用法及代码示例
- JQuery jQuery.getJSON()用法及代码示例
- JQuery jQuery.proxy()用法及代码示例
- JQuery jQuery.ajaxSetup()用法及代码示例
- JQuery jQuery.type()用法及代码示例
- JQuery jQuery.cssHooks用法及代码示例
- JQuery UI jQuery.effects.define()用法及代码示例
- JQuery jQuery.parseXML()用法及代码示例
- JQuery jQuery.support用法及代码示例
- JQuery Mobile jQuery.mobile.path.isAbsoluteUrl()用法及代码示例
注:本文由纯净天空筛选整理自jquery.com大神的英文原创作品 jQuery.when()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。