jQuery.when()

Функция jQuery.when() используется для создания Deferred-объекта, состояние которого зависит от состояния переданных в него объектов. Объекты передаются отдельными аргументами. Это могут быть Deferred-объекты или простые JavaScript-объекты.

Функция jQuery.when() возвращает Promise-версию Deferred-объекта, то есть его состояние нельзя изменить принудительно. Он перейдёт в состояние выполнено тогда, когда все переданные объекты примут состояние выполнено. Если хотя бы один объект примет состояние отклонено, тогда и общий объект перейдёт в это состояние. Простые JavaScript-объекты, передаваемые в метод jQuery.when(), всегда имеют состояние выполнено.

Если метод jQuery.when() вызывается без аргументов, тогда он возвращает Promise-объект в состоянии выполнено.

Если методу jQuery.when() передаётся один простой JavaScript-объект, тогда он возвращает Promise-объект в состоянии выполнено. Обработчики состояния выполнено получат в качестве аргумента указанный JavaScript-объект.

Если аргументом метода jQuery.when() указан один Deferred-объект, тогда метод возвращает его Promise-версию, то есть аналогично использованию метода deferred.promise().

Варианты использования

jQuery.when([объект_1[, объект_2[...]]]) => Promise
Возвращает новый Deferred-объект. В качестве аргументов можно указывать Deferred-объекты или простые JavaScript-объекты.

Примеры

/* Создание заместителя выполненного Deferred-объекта */
var promise = $.when();
promise.done(function() {
  alert('Выполнить немедленно');
});

/* Создание заместителя выполненного Deferred-объекта с передачей аргумента */
var promise = $.when({test: 'Тест пройден'});
promise.done(function (obj) {
  alert(obj.test); /* 'Тест пройден' */
});

/* Создание общего Deferred-объекта для отслеживания двух других */
var promise = $.when($.ajax('/test_1.php'), $.ajax('/test_2.php'));
promise
  .done(function() {
    alert('Все ajax-запросы выполнены');
  })
  .fail(function() {
    alert('Как минимум один ajax-запрос не выполнен');
  });