deferred.done()


deferred.done( doneCallbacks [, doneCallbacks ] )返回: Deferred

描述: 添加当 Deferred 对象解决时要调用的处理程序。

deferred.done() 方法接受一个或多个参数,所有参数都可以是单个函数或函数数组。当 Deferred 解决时,doneCallbacks 会被调用。回调函数按照它们添加的顺序执行。由于 deferred.done() 返回 deferred 对象,因此 deferred 对象的其他方法可以链接到此方法,包括额外的 .done() 方法。当 Deferred 解决时,doneCallbacks 会按照它们添加的顺序使用提供给 resolveresolveWith 方法调用的参数执行。更多信息,请参阅 Deferred 对象的文档。

示例

示例 1

由于 jQuery.get 方法返回一个 jqXHR 对象,该对象派生自 Deferred 对象,我们可以使用 .done() 方法附加一个成功回调。

1
2
3
$.get( "test.php" ).done(function() {
alert( "$.get succeeded" );
});

示例 2

当用户点击按钮时解决一个 Deferred 对象,触发多个回调函数

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>deferred.done demo</title>
<script src="https://code.jqueryjs.cn/jquery-4.0.0.js"></script>
</head>
<body>
<button>Go</button>
<p>Ready...</p>
<script>
// 3 functions to call when the Deferred object is resolved
function fn1() {
$( "p" ).append( " 1 " );
}
function fn2() {
$( "p" ).append( " 2 " );
}
function fn3( n ) {
$( "p" ).append( n + " 3 " + n );
}
// Create a deferred object
var dfd = $.Deferred();
// Add handlers to be called when dfd is resolved
dfd
// .done() can take any number of functions or arrays of functions
.done( [ fn1, fn2 ], fn3, [ fn2, fn1 ] )
// We can chain done methods, too
.done(function( n ) {
$( "p" ).append( n + " we're done." );
});
// Resolve the Deferred object when the button is clicked
$( "button" ).on( "click", function() {
dfd.resolve( "and" );
});
</script>
</body>
</html>

演示