Callbacks
Объект $.Callbacks
Last updated
Объект $.Callbacks
Last updated
Callbacks – это крутой объект. Он позволяет составлять списки функций обратного вызова, а также даёт бразды правления над ними. Работать с ним проще нежели с Deferred, в нём нет разделения на позитивный и негативный сценарии. Лишь стек функций, который будет выполнен по команде fire()
:
Если открыть консоль и запустить скрипт выше, то в результате получите что-то типа такого:
— А в чём сила, брат? — В аргументах.
По умолчанию вы можете прямо из консоли вызывать метод fire()
снова и снова, и будете получать один и тот же результат раз за разом. А можно задать поведение Callbacks через флаги:
флаг | описание |
---|---|
Наверное, будет лучше с примерами, вот once
:
C memory
посложнее, будьте внимательней:
Пример с уникальностью unique
прост до безобразия:
Флаг stopOnFalse
:
Перечисленные флаги можно комбинировать и получать интересные результаты, а можно не получать, а лишь посмотреть на следующий пример. Вот страничка для работы:
Добавьте команды по передвижению автомобиля в произвольном порядке и количестве. Для этого следует запустить перечисленные ниже скрипты (никаких изменений с машинкой до запуска метода fire()
не будет):
Поехали!
Из истории: объект «Deferred» отпочковался от метода
$.ajax()
в результате рефакторинга jQuery версии 1.5. Шло время, появлялись новые версии jQuery, и вот новый виток рефакторинга – результатом стало отделение «Callbacks» от «Deferred» в версии 1.7, таким образом в текущей версии библиотеки метод$.ajax()
работает с объектом «Deferred», который является надстройкой над «Callbacks». Дабы не вносить путаницу в терминологию, я использую определение «Deferred Callbacks» и при работе с «Callbacks», ибо колбэков много, и каждый раз уточнять, что я говорю именно «о том самом» — дело достаточно утомительное.
Статья по данной теме, рекомендую так сказать — Async JS: The Power of $.deffered
once
все функции будут вызваны единожды (аналогично как в объекте Deferred)
memory
сохранять значение с последнего вызова fire()
, и скармливать его в ново-зарегистрированные функции обратного вызова, и лишь потом обрабатывает новое значение (в Deferred именно так)
unique
список функций обратного вызова фильтруется по уникальности
stopOnFalse
как только какая-нибудь функция вернёт «false
», процесс запуска остановится