.promise()
分类:Deferred对象
.promise( [type ] [, target ] )
描述:返回一个Promise对象,用来观察某种类型的所有操作何时绑定到该集合、所有操作还处于队列中或是已经完成。
- type (默认值:
fx)类型:String需要观察的队列的类型。 - target类型:PlainObject要附加promise方法的对象
.promise()方法返回一个动态生成的Promise对象,一旦绑定到集合上的某种类型的所有操作,队列的操作不非队列的操作,都结束了的时候,该Promise对象就被解决了。
默认情况下,type的值是"fx",它意味着当选中的元素上所有的动画都完成时,返回的Promise被解决。
解决的上下文,以及唯一的参数,是一个元素集合,在这个元素集合上调用.promise()。
如果提供了target,.promise()将把方法附加到它上面,然后返回这个对象,而不是创建一个新对象。这个可以用来把Promise对象的行为附加到一个已经存在的对象上。
注意:返回的Promise对象,链接到一个存储在元素的.data()上的Deferred对象。因为.remove()方法会删除元素的数据,以及元素本身,它可以防止任何元素的未解决的Promise对象被解决。如果在一个元素的Promise对象被解决之前把这个元素从DOM上删除是必要的,请使用.detach()代替它,在Promise对象被解决了之后,再调用.removeData()方法。
示例
在一个不带激活动画的集合上使用.promise(),返回一个已解决的Promise对象:
var div = $( "<div>" );
div.promise().done(function( arg1 ) {
// Will fire right away and alert "true"
alert( this === div && arg1 === div );
});
当所有的动画结束时,解决返回的Promise对象(包括那些在动画回调函数和之后添加的回调函数中初始化的动画):
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>promise demo</title>
<style>
div {
height: 50px;
width: 50px;
float: left;
margin-right: 10px;
display: none;
background-color: #090;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>
<script>
$( "button" ).on( "click", function() {
$( "p" ).append( "Started..." );
$( "div" ).each(function( i ) {
$( this ).fadeIn().fadeOut( 1000 * ( i + 1 ) );
});
$( "div" ).promise().done(function() {
$( "p" ).append( " Finished! " );
});
});
</script>
</body>
</html>
演示结果
使用一个$.when()语句解决返回的Promise对象(.promise()方法使它可能用jQuery集合做到这):
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>promise demo</title>
<style>
div {
height: 50px;
width: 50px;
float: left;
margin-right: 10px;
display: none;
background-color: #090;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>
<script>
var effect = function() {
return $( "div" ).fadeIn( 800 ).delay( 1200 ).fadeOut();
};
$( "button" ).on( "click", function() {
$( "p" ).append( " Started... " );
$.when( effect() ).done(function() {
$( "p" ).append( " Finished! " );
});
});
</script>
</body>
</html>
演示结果