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


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


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

说明:返回一个 Deferred 的 Promise 对象。

  • 添加的版本:1.5deferred.promise( [target ] )

    • target
      类型:Object
      必须附加承诺方法的对象

deferred.promise() 方法允许异步函数防止其他代码干扰其内部请求的进度或状态。 Promise 仅公开附加附加处理程序或确定状态所需的延迟方法(thendonefailalwayspipeprogressstatepromise),但不是那些改变状态的(resolverejectnotifyresolveWithrejectWithnotifyWith)。

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

如果您正在创建 Deferred,请保留对 Deferred 的引用,以便在某个时候可以解决或拒绝它。通过deferred.promise() 返回only Promise 对象,以便其他代码可以注册回调或检查当前状态。

有关详细信息,请参阅 Deferred object 的文档。

例子:

创建一个 Deferred 并设置两个基于计时器的函数,以在随机间隔后解决或拒绝 Deferred。无论哪个先触发"wins",都会调用其中一个回调。第二次超时无效,因为延迟已经从第一次超时操作完成(处于已解决或拒绝状态)。还要设置一个基于计时器的进度通知函数,并调用一个将"working..." 添加到文档正文的进度处理程序。

function asyncEvent() {
  var dfd = jQuery.Deferred();
 
  // Resolve after a random interval
  setTimeout(function() {
    dfd.resolve( "hurray" );
  }, Math.floor( 400 + Math.random() * 2000 ) );
 
  // Reject after a random interval
  setTimeout(function() {
    dfd.reject( "sorry" );
  }, Math.floor( 400 + Math.random() * 2000 ) );
 
  // Show a "working..." message every half-second
  setTimeout(function working() {
    if ( dfd.state() === "pending" ) {
      dfd.notify( "working... " );
      setTimeout( working, 500 );
    }
  }, 1 );
 
  // Return the Promise so caller can't change the Deferred
  return dfd.promise();
}
 
// Attach a done, fail, and progress handler for the asyncEvent
$.when( asyncEvent() ).then(
  function( status ) {
    alert( status + ", things are going well" );
  },
  function( status ) {
    alert( status + ", you fail this time" );
  },
  function( status ) {
    $( "body" ).append( status );
  }
);

使用 target 参数将现有对象提升为 Promise:

// Existing object
var obj = {
    hello: function( name ) {
      alert( "Hello " + name );
    }
  },
  // Create a Deferred
  defer = $.Deferred();
 
// Set object as a promise
defer.promise( obj );
 
// Resolve the deferred
defer.resolve( "John" );
 
// Use the object as a Promise
obj.done(function( name ) {
  obj.hello( name ); // Will alert "Hello John"
}).hello( "Karl" ); // Will alert "Hello Karl"

相关用法


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