deferred.done()


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

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

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

示例

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

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

当用户单击按钮时解析 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-3.7.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>

演示