设定两个延时时间是随机的定时器,分别用于解决(resolve)和拒绝(reject)延迟对象
$(function () {
function asyncEvent(){
var dfd = new jQuery.Deferred();
// 在一个随机的时间间隔之后 Resolve (解决状态)
setTimeout(function(){
dfd.resolve("欢呼");
}, Math.floor(400+Math.random()*2000));
// 在一个随机的时间间隔之后 reject (拒绝状态)
setTimeout(function(){
dfd.reject("对不起");
}, Math.floor(400+Math.random()*2000));
// 每半秒显示一个"working..."消息
setTimeout(function working(){
if ( dfd.state() === "pending" ) {
dfd.notify("working... ");
setTimeout(working, 500);
}
}, 1);
// 返回 Promise 对象,调用者不能改变延迟对象
return dfd.promise();
}
// 为异步函数附加一个done, fail, 和 progress 处理程序
$.when( asyncEvent() ).then(
function(status){
alert( status+', 事情进展顺利' );
},
function(status){
alert( status+', 这次你失败了' );
},
function(status){
$("body").append(status);
}
);
})
定义和用法
.promise() 函数返回一个 Promise 对象,观察某种类型被绑定到集合的所有行动,是否已被加入到队列中。
注意:1. .promise() 方法返回一个动态生成的 Promise,当绑定到集合中的所有特定动作(action)已经被加入或未被加入到队列中时,生成的 Promise 将被受理(resolve)。
2. type 的默认值是"fx" ,这意味着被受理(resolve)的 Promise 对象是在所有被选中元素的动画都完成时返回的。
3. 如果提供 target 参数,.promise() 在该参数上添加方法,然后返回这个对象,而不是创建一个新的。它适用于在一个已经存在的对象上添加 Promise 行为的情况。
语法
实例
.promise( [type ] [, target ] )
参数 | 描述 |
---|---|
type | String类型 需要待观察队列类型。 |
target | PlainObject类型 将要绑定 promise 方法的对象。 |
实例
动画结束时调用受理返回的 Promise
当所有的动画结束时(包括那些在动画回调函数和之后添加的回调函数中初始化的动画),受理(Resolve)返回的 Promise。
使用 $.when() 语句受理返回的 Promise
使用 $.when() 语句(.promise() 方法使得在 jQuery 集合中实现它变成了可能),受理(Resolve)返回的 Promise。