Spec-Zone.ru › jQuery

deferred.then()

deferred.then( doneFilter [, failFilter ] [, progressFilter ] )Возвращает: Promise

Описание: Добавляет обработчики, которые будут вызываться, когда объект Deferred разрешен, отклонен или находится в процессе выполнения.

  • версия добавлена: 1.8deferred.then( doneFilter [, failFilter ] [, progressFilter ] )

    • doneFilter
      Тип: Функция()
      Функция, которая вызывается, когда Deferred разрешен.
    • failFilter
      Тип: Функция()
      Необязательная функция, которая вызывается, когда Deferred отклонен.
    • progressFilter
      Тип: Функция()
      Необязательная функция, которая вызывается, когда Deferred получает уведомления о прогрессе.
  • версия добавлена: 1.5, удалена: 1.8deferred.then( doneCallbacks, failCallbacks )

    • doneCallbacks
      Тип: Функция()
      Функция или массив функций, вызываемых, когда Deferred разрешен.
    • failCallbacks
      Тип: Функция()
      Функция или массив функций, вызываемых, когда Deferred отклонен.
  • версия добавлена: 1.7, удалена: 1.8deferred.then( doneCallbacks, failCallbacks [, progressCallbacks ] )

    • doneCallbacks
      Тип: Функция()
      Функция или массив функций, вызываемых, когда Deferred разрешен.
    • failCallbacks
      Тип: Функция()
      Функция или массив функций, вызываемых, когда Deferred отклонен.
    • progressCallbacks
      Тип: Функция()
      Функция или массив функций, вызываемых, когда Deferred уведомляет о прогрессе.

До jQuery 1.8, аргументы могли быть функцией или массивом функций.

Для всех подписей аргументы могут быть null если callback этого типа не требуется. В качестве альтернативы, используйте .done(), .fail() или .progress() для установки только одного типа callback без фильтрации статуса или значений.

Начиная с jQuery 1.8, метод deferred.then() возвращает новую promise, которая может фильтровать статус и значения deferred с помощью функции, заменяя устаревший метод deferred.pipe(). Функции doneFilter и failFilter фильтруют исходный статус resolved/rejected и значения deferred. Функция progressFilter фильтрует любые вызовы методов исходного deferred notify или notifyWith. Эти функции фильтра могут вернуть новое значение, которое будет передано callback функции promise .done() или .fail(), или они могут вернуть другой наблюдаемый объект (Deferred, Promise и т.д.), который передаст свой статус resolved/rejected и значения callback функциям promise. Если используемая функция фильтра равна null, или не указана, promise будет разрешен или отклонен с теми же значениями, что и исходный.

Callbacks выполняются в том порядке, в котором они были добавлены. Поскольку deferred.then возвращает Promise, к этому методу можно привязать другие методы объекта Promise, включая дополнительные методы .then().

Примеры:

Поскольку метод jQuery.get возвращает объект jqXHR, который является производным от объекта Deferred, мы можем прикрепить обработчики, используя метод .then.

$.get( "test.php" ).then(
  function() {
    alert( "$.get succeeded" );
  }, function() {
    alert( "$.get failed!" );
  }
);

Фильтр значения resolve:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>deferred.then demo</title>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<button>Filter Resolve</button>
<p></p>
 
<script>
var filterResolve = function() {
  var defer = $.Deferred(),
    filtered = defer.then(function( value ) {
      return value * 2;
    });
 
  defer.resolve( 5 );
  filtered.done(function( value ) {
    $( "p" ).html( "Value is ( 2*5 = ) 10: " + value );
  });
};
 
$( "button" ).on( "click", filterResolve );
</script>
 
</body>
</html>

Демо:

Фильтр значения reject:

var defer = $.Deferred(),
  filtered = defer.then( null, function( value ) {
    return value * 3;
  });
 
defer.reject( 6 );
filtered.fail(function( value ) {
  alert( "Value is ( 3*6 = ) 18: " + value );
});

Цепочка задач:

var request = $.ajax( url, { dataType: "json" } ),
  chained = request.then(function( data ) {
    return $.ajax( url2, { data: { user: data.userId } } );
  });
 
chained.done(function( data ) {
  // data retrieved from url2 as provided by the first request
});

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

Spec-Zone.ru

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