當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。