3.9.3 为普通对象增加Defered接口

3.9.3 为普通对象增加Defered接口

如果调用Deferred对象的promise()方法时传入了一个对象作为参数,Deferred对象将会为该参数对象增加Deferred接口,这样即可在该参数对象上调用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
<!DOCTYPE html>
<html>

<head>
<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Deferred对象 </title>
</head>

<body>
<script type="text/javascript" src="../jquery-3.1.1.js">
</script>
<script type="text/javascript">
// 已有的对象
var object =
{
hello: function (name) {
document.write(name + ",您好!<br/>");
}
};
// 创建一个Deferred对象
var defer = $.Deferred();
// 为object对象增加Deferred接口
defer.promise(object); // ①
// 将object当成Promise对象使用
// 可以多次调用done来注册多个回调函数,持久操作完成时,这些回调函数会依次执行.
object.done(function (name) {
object.hello(name);
}).done(function (name) {
document.write("执行完成了:" + name + "<br/>");
});
// 将Deferred对象的状态设为resolved,
// 这将激发object对象上通过done()方法添加的回调函数
defer.resolve("孙悟空"); // ②
</script>
</body>

</html>

该程序中①号粗体字代码调用promise(object)方法为object对象添加了Deferred接口,接下来为该对象调用done()方法绑定了两个回调函数,
程序在②号粗体字代码处将该Deferred对象的状态改为resolved,这将会激发object对象上通过done()方法添加的两个回调函数。