.promise()| jqueryAPI 2.2 中文手册- AspRain.cn 致力于Web开发技术翻译整理

jQuery API 2.2.0

.promise()

分类:Deferred对象

返回: Promise

.promise( [type ] [, target ] )

描述:返回一个Promise对象,用来观察某种类型的所有操作何时绑定到该集合、所有操作还处于队列中或是已经完成。

加入于: 1.6
.promise( [type ] [, target ] )
  • 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>

演示结果

如果网页上不能运行示例,请点击http://www.asprain.cn/jQueryAPI/promise.htm查看示例。

如果你觉得本文档对你有用,欢迎给翻译作者支付宝打赏,支持翻译作者源源不断翻译更多有用的技术文档。