jQuery объект Deferred

Описание и примеры этого раздела рассчитаны на jQuery 3.1.1. Метки устаревания указывают также изменения в более поздних версиях; они не означают, что API отсутствует в 3.1.1.

Объект Deferred был введен в версии jQuery 1.5, является специальным объектом с методами регистрации нескольких обратных вызовов в очереди обратного вызова, он создается путем вызова фабричной функции $.Deferred() (создает экземпляр объекта). Объект Deferred позволяет передавать состояние "success" или "failure" любой синхронной или асинхронной функции, что дает возможность зарегистрировать необходимые функции, которые будут вызваны при определенном условии .

После создания объекта Deferred можно использовать любой из приведенных ниже методов, связывая его непосредственно с объектом, либо сохраняя объект в отдельной переменной и вызывая один или несколько методов для этой переменной.

Синтаксис функции $.Deferred()

JavaScript
// без параметра
let myDeferredObject = $.Deferred()

// с указанием функции
let myDeferredObject = $.Deferred( beforeStart )

beforeStart - Function( Deferred deferred )

Значение параметра

Параметр Описание
beforeStart Функция, которая вызывается непосредственно перед возвращением из конструктора объекта. Новый отложенный объект будет доступен как по this, так и в качестве первого аргумента функции. Вызываемая функция может присоединять обратные вызовы, например с помощью метода deferred.then().

Более подробную информацию и примеры использования вы можете получить в описании функции $.Deferred().

Методы объекта Deferred и функция $.Deferred()

Метод / функция Описание
$.Deferred() Фабричная функция, которая возвращает специальный объект с методами регистрации нескольких обратных вызовов в очереди обратного вызова, вызывает очереди обратного вызова и передает состояние "success" или "failure" любой синхронной или асинхронной функции.
deferred.always() Добавляет обработчик или обработчики, которые будут вызваны при изменении состояния объекта Deferred на resolved (успешное выполнение), или rejected (выполнение отклонено).
deferred.catch() Добавляет обработчик или обработчики, которые будут вызваны при изменении состояния объекта Deferred на rejected (выполнение отклонено).
deferred.done() Добавляет обработчик или обработчики, которые будут вызваны при изменении состояния объекта Deferred на resolved (успешное выполнение).
deferred.fail() Добавляет обработчик или обработчики, которые будут вызваны при изменении состояния объекта Deferred на rejected (выполнение отклонено).
deferred.notify() Запускает событие прогресса выполнения с определенными аргументами, которое позволяет вызвать обработчики состояния объекта Deferred, находящегося на стадии выполнения (deferred.progress() и deferred.then()).
deferred.notifyWith() Запускает событие прогресса выполнения с определенными аргументами и контекстом выполнения, которое позволяет вызвать обработчики состояния объекта Deferred, находящегося на стадии выполнения (deferred.progress() и deferred.then()).
deferred.progress() Добавляет обработчик или обработчики, вызываемые когда объект Deferred создает уведомления о ходе выполнения.
deferred.promise() Возвращает копию объекта Deferred (объект Promise), который имеет аналогичный набор методов, за исключением методов изменения состояния объекта.
deferred.reject() Изменяет состояние объекта Deferred на rejected (выполнение отклонено) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (failCallbacks) с заданными аргументами.
deferred.rejectWith() Изменяет состояние объекта Deferred на rejected (выполнение отклонено) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (failCallbacks) с заданным контекстом и аргументами.
deferred.resolve() Изменяет состояние объекта Deferred на resolved (успешное выполнение) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (doneCallbacks) с заданными аргументами.
deferred.resolveWith() Изменяет состояние объекта Deferred на resolved (успешное выполнение) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (doneCallbacks) с заданным контекстом и аргументами.
deferred.state() Определяет текущее состояние выполнения объекта Deferred.
deferred.then() Добавляет обработчик или обработчики, вызываемые когда объект Deferred имеет состояние resolved (успешное выполнение), rejected (выполнение отклонено), или находится на стадии выполнения.
$.when() Предоставляет способ выполнения функций обратного вызова на основе нуля или более объектов, имеющих метод .then(), как правило, объекты Deferred, которые представляют асинхронные события.
.promise() Возвращает динамически сгенерированный объект Promise для наблюдения за завершением всех действий определенного типа, связанных с коллекцией jQuery, поставленных в очередь или нет.

Дополнительные возможности jQuery 3.1.1

Назначение и ограничения API
API Описание
deferred.pipe() Устарело Создаёт Promise с преобразованными результатами или уведомлениями. Устарел с jQuery 1.8; используйте .then(), учитывая его асинхронность и обработку ошибок в jQuery 3. Документация.
$.Deferred.exceptionHook() Диагностический обработчик исключений внутри Deferred. Получает ошибку; переопределение позволяет настроить её журналирование и не заменяет обработчик .catch(). Документация.
$.Deferred.getStackHook() Устарело Необязательная точка расширения для сохранения стека до асинхронного вызова Deferred. В jQuery 3.1.1 не определена по умолчанию; пользовательская функция возвращает стек для exceptionHook. Документация. Устарело с jQuery 3.7.