Spec-Zone.ru › jQuery

deferred.promise()

deferred.promise( [target ] )Возвращает: Promise

Описание: Возвращает объект Promise от Deferred.

  • версия добавлена: 1.5deferred.promise( [target ] )

    • target
      Тип: Объект
      Объект, на который необходимо прикрепить методы promise

Метод deferred.promise() позволяет асинхронной функции предотвратить вмешательство другого кода в ход или состояние её внутреннего запроса. Promise предоставляет только методы Deferred, необходимые для подключения дополнительных обработчиков или определения состояния (then, done, fail, always, pipe, progress, state и promise), но не те, которые изменяют состояние (resolve, reject, notify, resolveWith, rejectWith, и notifyWith).

Если target указан, deferred.promise() прикрепит методы к нему и вернёт этот объект вместо создания нового. Это может быть полезно для прикрепления поведения Promise к уже существующему объекту.

Если вы создаёте Deferred, сохраните ссылку на Deferred, чтобы его можно было разрешить или отклонить в какой-то момент. Верните только объект Promise через deferred.promise(), чтобы другой код мог зарегистрировать обратные вызовы или проверить текущее состояние.

Для получения дополнительной информации см. документацию для объекта Deferred.

Примеры:

Создайте Deferred и установите две функции, основанные на таймерах, для разрешения или отклонения Deferred через случайный интервал. Та которая сработает первой "выигрывает" и вызовет один из обратных вызовов. Второй таймаут не имеет эффекта, так как Deferred уже завершён (в состоянии разрешён или отклонён) из-за действия первого таймаута. Также установите функцию уведомления о прогрессе, основанную на таймере, и вызовите обработчик прогресса, который добавляет "работаем..." в тело документа.

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"

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/deferred.promise

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API