当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JQuery .promise()用法及代码示例


用法
.promise(  [type ] [, target ] ) => Promise

说明:返回一个 Promise 对象以观察绑定到集合的特定类型的所有操作(无论是否排队)都已完成。

  • 添加的版本:1.6.promise( [type ] [, target ] )

    • type(默认:fx)
      类型:String
      需要观察的队列类型。
    • target
      类型:PlainObject
      必须附加承诺方法的对象

.promise() 方法返回一个动态生成的 Promise,一旦绑定到集合的特定类型的所有操作(无论是否排队)都结束,该 Promise 就会被解析。

默认情况下,type"fx" ,这意味着当所选元素的所有动画都完成时,返回的 Promise 被解析。

解析上下文和唯一参数是调用.promise() 的集合。

如果提供了target.promise() 会将方法附加到它上面,然后返回这个对象而不是创建一个新对象。这对于将 Promise 行为附加到已经存在的对象很有用。

注意:返回的 Promise 链接到存储在.data()对于一个元素。由于.remove()方法会删除元素的数据以及元素本身,它会阻止元素的任何未解析的 Promise 解析。如果有必要在解析 Promise 之前从 DOM 中删除元素,请使用.detach()而是跟随.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-3.5.0.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-3.5.0.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>

演示:

相关用法


注:本文由纯净天空筛选整理自jquery.com大神的英文原创作品 .promise()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。