.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>
演示结果