deferred.then( doneFilter [, failFilter ] [, progressFilter ] )Returns: Promise
Description: 添加处理程序,以便在 Deferred 对象解决、拒绝或仍在进行中时调用。
-
version added: 1.8deferred.then( doneFilter [, failFilter ] [, progressFilter ] )
-
version added: 1.5, removed: 1.8deferred.then( doneCallbacks, failCallbacks )
-
version added: 1.7, removed: 1.8deferred.then( doneCallbacks, failCallbacks [, progressCallbacks ] )
在 jQuery 1.8 之前,参数可以是函数或函数数组。
对于所有签名,如果不需要该类型的回调,参数可以是 null。或者,使用 .done()、.fail() 或 .progress() 来设置只有一种类型的回调,而无需过滤状态或值。
从 jQuery 1.8 开始,deferred.then() 方法返回一个新的 Promise,它可以通过函数过滤 deferred 的状态和值,取代了现已弃用的 deferred.pipe() 方法。doneFilter 和 failFilter 函数过滤原始 deferred 的已解决/已拒绝状态和值。progressFilter 函数过滤对原始 deferred 的 notify 或 notifyWith 方法的任何调用。这些过滤函数可以返回一个新值以传递给 Promise 的 .done() 或 .fail() 回调,或者它们可以返回另一个可观察对象(Deferred、Promise 等),该对象将把其已解决/已拒绝状态和值传递给 Promise 的回调。如果使用的过滤函数是 null 或未指定,则 Promise 将以与原始 deferred 相同的值解决或拒绝。
回调按添加顺序执行。由于 deferred.then 返回一个 Promise,因此 Promise 对象的其他方法可以链接到此方法,包括额外的 .then() 方法。
示例
示例 1
由于 jQuery.get 方法返回一个 jqXHR 对象,该对象派生自 Deferred 对象,因此我们可以使用 .then 方法附加处理程序。
|
1
2
3
4
5
6
7
|
|
示例 2
过滤解决值
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
|
演示
示例 3
过滤拒绝值
|
1
2
3
4
5
6
7
8
9
|
|
示例 4
链式任务
|
1
2
3
4
5
6
7
8
|
|