jQuery Deferred имеет две функции, которые могут использоваться для реализации асинхронной цепочки функций:
 then()
deferred.then( doneCallbacks, failCallbacks ) Returns: DeferreddoneCallbacks Функция или массив функций, вызываемых при разрешении отложенного.
failCallbacks Функция или массив функций, вызываемых при отклонении Отложенного.
 pipe()
deferred.pipe( [doneFilter] [, failFilter] ) Returns: PromisedoneFilter Необязательная функция, вызываемая при разрешении Отложенного.
failFilter Необязательная функция, вызываемая при отклонении Отложенного.
Я знаю, что then() было вокруг немного больше, чем pipe(), поэтому последнее должно добавить дополнительную выгоду, но какая разница именно ускользает от меня. Оба имеют почти одинаковые параметры обратного вызова, хотя они отличаются по названию, и разница между возвратом Deferred и возвратом Promise кажется незначительной.
Я читал официальные документы снова и снова, но всегда считаю их слишком "плотными", чтобы действительно обернуть мою голову, и поиск нашел много обсуждений одной или другой функции, но я не нашел ничего, что действительно разъясняет разные плюсы и минусы каждого.
  Итак, когда лучше использовать then, и когда лучше использовать pipe?
Добавление
 Отличный ответ Феликса действительно помог прояснить, как эти две функции отличаются. Но мне интересно, есть ли моменты, когда функциональность then() предпочтительнее функциональности pipe().
Очевидно, что pipe() более мощный, чем then(), и кажется, что первое может делать все, что может сделать последнее. Одной из причин использования then() может быть то, что его имя отражает его роль как завершения цепочки функций, обрабатывающих одни и те же данные.
  Но существует ли прецедент, для которого требуется then() вернуть исходный Deferred, который не может быть выполнен с помощью pipe() из-за того, что он возвращает новый Promise?
