Ответ 1
"Новый" способ, используя pipe
, называется Lettable Operators Pipeable Operators. "Старый" способ, в котором вы связываете операторов, вызывается с использованием "операторов патчей".
Начиная с версии 5.5, мы отправили "трубчатые операторы", к которым можно получить доступ в
rxjs/operators
(обратите внимание на плюрализованные "операторы" ). Они призваны стать лучшим подходом для привлечения только операторов, которые вам нужны, чем операторы "patch", найденные вrxjs/add/operator/*
.
Были проблемы с с операторами патчей. Они также могут гарантировать, что ваш произведенный комплект из вашего кода меньше. Существуют и другие преимущества, см. Документацию которая довольно хорошо ее охватывает.
Чтобы ответить на другой вопрос, хотя ваши 2 примера кода функционально эквивалентны. Также вы должны использовать Pipeable Operators для операторов патчей, когда это возможно.
Из документации (для полноты)
Проблемы с исправленными операторами для точечного соединения:
- Любая библиотека, которая импортирует оператор патча, добавит
Observable.prototype
для всех пользователей этой библиотеки, создав слепые зависимости. Если библиотека удаляет их использование, они неосознанно нарушают всех остальных. С помощью трубопроводов вам нужно импортировать операторы, которые вам нужны, в каждый файл, в котором вы их используете.- Операторы, проложенные непосредственно на прототипе, не являются "древовидными" с помощью таких инструментов, как rollup или webpack. Операторы, работающие по протоколу Pipeable, будут такими, какими они являются просто функциями, выведенными из модулей напрямую.
- Неиспользуемые операторы, которые импортируются в приложениях, не могут быть надежно обнаружены с помощью какого-либо инструмента сборки или правила lint. Это означает, что вы можете импортировать
scan
, но прекратите использовать его, и он все еще добавляется в ваш выходной пакет. Если у вас есть протоколы, если вы его не используете, правило lint может забрать его для вас.- Функциональный состав является удивительным. Построение собственных пользовательских операторов становится намного проще, и теперь они работают и выглядят так же, как и все остальные операторы из rxjs. Вам больше не нужно расширять Observable или переопределять
lift
.