jQuery.Deferred, впервые представлен в версии 1.5, является цепным инструментом объекта, который может зарегистрировать несколько обратных вызовов в очередь обратного вызова, запустить очередь обратных вызовов, и передать успешное или неудачное состояние любой синхронной или асинхронной функции.
В JavaScript это является общим для вызова функций, которые необязательно принимают обратные вызовы, которые вызываются в рамках этой функции.
Для примера, в версиях предыдущих jQuery 1.5, асинхронные процессы, такие как jQuery.ajax() принимают обратные вызовы для использования в ближайшем будущем на случаи успеха, ошибки и завершения Ajax запроса.
jQuery.Deferred вносит ряд усовершенствований в способы управления и ссылки обратного вызова. В частности, jQuery.Deferred предоставляет гибкие способы для обеспечения нескольких обратных вызовов, и эти обратные вызовы могут быть запущены независимо от того, произошла ли отправка оригинального обратного вызова. jQuery Deferred основан на дизайне CommonJS Promises/A.
Одна модель для понимания Отсроченности это думать о ней, как о функции оболочки. Методы deferred.then(), deferred.done(), и deferred.fail() указывают для вызова функций, а методы deferred.resolve(args) и deferred.reject(args) “вызывают” функции с представленными вами аргументами. После того как Отсроченность была решена или отклонена, она остается в этом состоянии; повторный вызов deferred.resolve() будет отклонен, например. Если дополнительные функции добавленны с помощью deferred.then() после того, как Отсроченность решена, они будут вызваны немедлено с представленными до этого аргументами.
В большинстве случаев, когда вызовы jQuery API возвращают Отсроченный или Отсроченно-совместимый объект, такой как jQuery.ajax() или jQuery.when(), вы должны только использовать методы deferred.then(), deferred.done(), и deferred.fail() для вызова обратных функций Отсроченной очереди. Внутренние вызовы API или код, который создает Отсроченность вызовет deferred.resolve() или deferred.reject() отсроченные на какой-то момент, будут причиной запуска соответствующих функций обратного вызова.
Конструктор jQuery.Deferred
Конструктор jQuery.Deferred создает новый Отсроченный объект. Оператор new является опциональным.
jQuery.Deferred может передавать дополнительную функцию, которая вызывается непосредственно перед возвращением конструктора и передает построеный отсроченный объект, а также объект this в качестве первого аргумента функции. Вызываемая функция обратного вызова может быть прикреплена с использованием deferred.then(), например.
Отсроченный объект начинается в нерешенном состоянии. Любые обратные вызовы добавленные к объекту с помощью deferred.then(), deferred.done(), или deferred.fail() ставятся в очередь, чтобы быть выполненными позже. Вызов deferred.resolve() или deferred.resolveWith() переводит Отсроченный в решенное состояние и сразу выполняет любой doneCallback, который установлен. Вызов deferred.reject() или deferred.rejectWith() переводит Отсроченный в отклоненное состояние и сразу выполняет любой failCallback, который установлен. Как только объект вошел в решенное или отклоненное состояние, он остается в этом состоянии. Обратные вызовы можно еще добавить, чтобы решить или отклонить Отсроченный - они будут выполненны немедленно.
Отсроченный объект является змеевидным, аналогично тому, как объект jQuery змеевидный, но оно имеет свои собственные методы. После создания Отсроченного объекта, вы можете использовать любой из перечисленных ниже способов, либо напрямую соединять от создания объекта, либо сохранить объект в переменной и использовать один или несколько методов для этой переменной.

