Согласно https://www.learnrxjs.io/
С последней версией RXJS вы можете использовать эти 3 оператора
const obs = getMyObservable().pipe( // Let's assume 'obs' returns an array
tap(() => console.log('Action performed before any other')),
catchError(() => { console.error('Error emitted'); return of([]); }), // We return [] instead
finalize(() => console.log('Action to be executed always')) // Either Error or Success
);
obs.subscribe(data => console.log(data)); // After everything, we log the output.
Надеюсь, это поможет
РЕДАКТИРОВАТЬ на основе комментария JoniJnm
Точнее говоря, есть 3 основных трубы:
- Трубы, которые изменяют результат перед подпиской.
- Трубы, которые не изменяютсярезультат перед подпиской.
- Special Pipes.
Tap
, например, относится ко второму типу, он может принимать входные данные из наблюдаемой или предыдущейтрубы и делать что-нибудь с этим, но не может изменить результат трубы для следующего шага.
Map
похож, но он относится к первому типу трубы, он принимает входные данныеи должен возвращать вывод, который может быть использован в следующем канале или окончательной подписке.
Finalise
- это специальный канал, он делает то же, что и Tap
, но после подписки,это хорошо, например, чтобы зарегистрировать окончательные результаты или отменить подписку после ее завершенияs.
CatchError
- это канал, который изменяет результат, но вызывается только в том случае, если предыдущий шаг выдал ошибку.Это используется, чтобы избежать необработанной ошибки, и вы должны вернуть наблюдаемое «по умолчанию» вместо сбойной наблюдаемой (поэтому мы обрабатываем ошибку, и приложение не ломается).
Вы можете догадаться, когда в вашей наблюдаемой произошла ошибка, если catchError была запущена, и обработать ее сразу же, прежде чем она достигнет подписки.
Если этот канал не запущен, результат считается без ошибок.