Обновление: этот вопрос сейчас устарел, поскольку документация является точной и актуальной.
Я немного разбираюсь в jQuery Deferred/Promise API, и я очень смущен различием между pipe()
и then()
философски и в документации jQuery. Я обнаружил, что pipe() является просто псевдонимом для then() по jQuery 1.8.
Из источника jQuery:
// Keep pipe for back-compat
promise.pipe = promise.then;
Однако документация полностью отличается для pipe()
и then()
, поскольку они предположительно имеют совершенно разные виды использования.
Описание для then()
:
Описание: Добавить обработчики, которые будут вызываться, когда объект Отложенного разрешен или отклонен.
Описание для pipe()
:
Описание: Утилита для фильтрации и/или цепочки Отложенные.
Я понимаю, что исторически они имели несколько иное поведение, но во всей документации для протокола или для, он даже не говорит, что эти две функции выполняют то же самое сейчас.
Итак, вот мой вопрос из двух частей:
- Почему документация между
pipe()
иthen()
отличается от jQuery 1.8? - Почему
then()
возвращает новый отложенный объект? Это поведение полностью недокументировано (docs просто говорят, что он возвращает Отложенный, а не новый). Я понимаю, что это имеет смысл при этом (а именно, реализовать все функцииpipe()
), но философски, почему это так? Это необязательно, учитывая описаниеthen()
(для прикрепления обработчиков).
Обновление
Я даже догадаюсь, что документы then()
вводят в заблуждение и неточно:
Поскольку отложенный. then возвращает отложенный объект, к нему могут быть привязаны другие методы отложенного объекта, включая дополнительные методы .then().
Возможно, это просто расплывчато, но это означает, что он возвращает отложенный объект, который вы назвали then()
on для цепочки, когда на самом деле он возвращает совершенно новый объект....
Обновить снова
Кажется, что документация просто ошибочна/устарела! Так что ответы, почему в документации не упоминается, что они одно и то же. Однако мой второй вопрос все еще стоит. Является ли причина then()
возвратой новой отложенной просто так, чтобы она и pipe()
могли быть эквивалентны?