Большинство операторов работают в поточной последовательности, например:
source$.pipe(
map((a: string) => changeAndReturnArray(a)),
filter((b: string[]) => giveMeOnlySymbolsThatAreAfterNInAlphabet(b)),
switchMap((c: string[]) => putToSomeObservable(c))
....
);
В этом примере вы не «нарушаете» поток и не выпрыгиваете за его пределы для выполнения каких-либо внешних действий.Прыжок за пределы потока возможен с помощью оператора «tap», где вы можете:
- вызывать функции, которые вызовут некоторый побочный эффект, который может быть виден конечному пользователю (например, диалоговое окно отображения, показывать снэк-бар, перенаправить на другой маршрут (но, по моему мнению, таким способом не рекомендуется использовать tap))
- диспетчеризация действий для хранилища (если вы используете какой-либо - например, хранилище ngrx)
- debugвы -> console.log ()
- все, что может рассматриваться как «побочный эффект» для вашего потока.
Мое личное мнение - используйте «tap», только еслиВы не можете найти лучшего решения.Прыжки за пределы потока и вызов побочного эффекта могут быть обоюдоострым мечом, особенно когда вы имеете дело с более крупным приложением.Побочный эффект всегда сложнее поддерживать, и вы можете закончить с приложением, которое делает магические вещи безо всякой причины.