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-запрос не выполнен');
});