Spec-Zone.ru › jQuery

jQuery.Deferred()

jQuery.Deferred( [beforeStart ] )Возвращает: Deferred

Описание: Функция-фабрика, которая возвращает цепочечный утилитарный объект с методами для регистрации нескольких обратных вызовов в очереди обратных вызовов, вызова очереди обратных вызовов и передачи состояния успеха или ошибки любой синхронной или асинхронной функции.

  • версия добавлена: 1.5jQuery.Deferred( [beforeStart ] )

    • beforeStart
      Тип: Функция( Deferred deferred )
      Функция, которая вызывается непосредственно перед возвратом конструктора.

Фабрика jQuery.Deferred() создаёт новый объект deferred.

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

Объект Deferred начинает в состоянии pending. Любые обратные вызовы, добавленные к объекту с помощью deferred.then(), deferred.always(), deferred.done() или deferred.fail(), ставятся в очередь для выполнения позже. Вызов deferred.resolve() или deferred.resolveWith() переводит Deferred в состояние resolved и немедленно выполняет все doneCallbacks, которые установлены. Вызов deferred.reject() или deferred.rejectWith() переводит Deferred в состояние rejected и немедленно выполняет все failCallbacks, которые установлены. После того, как объект перешёл в состояние resolved или rejected, он остаётся в этом состоянии. Обратные вызовы всё ещё могут быть добавлены к Deferred в состоянии resolved или rejected — они будут выполнены немедленно.

Улучшенные обратные вызовы с jQuery Deferred

В JavaScript распространён вызов функций, которые по желанию принимают обратные вызовы, вызываемые внутри этой функции. Например, в версиях jQuery до 1.5 асинхронные процессы, такие как jQuery.ajax(), принимают обратные вызовы, которые вызываются в ближайшем будущем при успехе, ошибке и завершении ajax-запроса.

jQuery.Deferred() вводит несколько улучшений в способе управления и вызова обратных вызовов. В частности, jQuery.Deferred() предоставляет гибкие способы предоставления нескольких обратных вызовов, и эти обратные вызовы могут быть вызваны независимо от того, произошёл ли исходный вызов обратного вызова. jQuery Deferred основан на проекте CommonJS Promises/A.

Одна из моделей понимания Deferred — это представление его как обертки функции, учитывающей цепочки. Методы deferred.then(), deferred.always(), deferred.done() и deferred.fail() указывают функции, которые должны быть вызваны, а методы deferred.resolve(args) или deferred.reject(args) "вызывают" функции с предоставленными аргументами. После того, как Deferred был разрешён или отклонён, он остаётся в этом состоянии; второй вызов deferred.resolve(), например, игнорируется. Если больше функций добавлены с помощью deferred.then(), например, после разрешения Deferred, они вызываются немедленно с ранее предоставленными аргументами.

В большинстве случаев, когда вызов jQuery API возвращает объект Deferred или совместимый с Promise, например, jQuery.ajax() или jQuery.when(), вам нужно использовать только методы deferred.then(), deferred.done() и deferred.fail() для добавления обратных вызовов в очереди Deferred. Внутренние части вызова API или кода, создающего Deferred, вызовут deferred.resolve() или deferred.reject() на deferred в какой-то момент, что приведёт к выполнению соответствующих обратных вызовов.

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

Spec-Zone.ru

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