Когда следует использовать метод jQuery deferred «then» и когда следует использовать метод «pipe»?

jQuery Deferred имеет две функции, которые можно использовать для реализации асинхронной цепочки функций:

then()

deferred.then( doneCallbacks, failCallbacks ) Возвращает: Deferred

doneCallbacks Функция или массив функций, вызываемый при разрешении Deferred.
failCallbacks Функция или массив функций, вызываемый при отклонении Deferred.

pipe()

deferred.pipe( [doneFilter] [, failFilter] ) Возвращает: Promise

doneFilter Необязательная функция, которая вызывается при разрешении Deferred.
failFilter Необязательная функция, которая вызывается при отклонении Deferred.

Я знаю, что then() существует немного дольше, чем pipe(), так что последний должен приносить дополнительные преимущества, но в чем именно разница, ускользает от меня. Оба принимают почти одинаковые параметры обратного вызова, хотя они различаются по имени, и разница между возвратом Deferred и возвратом Promise кажется незначительной.

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

Так когда лучше использовать ,тогда, и когда лучше использовать pipe?


Дополнение

Отличный ответ Феликса действительно помог прояснить, как эти две функции различаются. Но мне интересно, бывают ли случаи, когда функциональность then() предпочтительнее, чем pipe().

Очевидно, что pipe() более мощный, чем then(), и кажется, что первый может делать то же, что и второй. Одной из причин использования then() может быть то, что его имя отражает его роль в качестве завершения цепочки функций, обрабатывающих одни и те же данные.

Но есть ли вариант использования, который требует, чтобы then() возвращал исходный Deferred, который не может быть выполнен с pipe() из-за он возвращает новый Promise?

96
задан Community 23 May 2017 в 10:31
поделиться