Согласно 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 основных канала:
- Пайпы, которые изменяют результат перед подпиской.
- Пайпы, которые не меняют результат до подписки.
- Специальные трубы.
Например, Tap
относится ко второму типу, он может принимать входные данные из наблюдаемых или предыдущих каналов и делать с ними что-либо, но не может изменить результат канала для следующего шага.
Map
похож, но относится к первому типу канала, он принимает входные данные и должен возвращать выходные данные, которые можно использовать в следующем канале или окончательной подписке.
Finalize
— это специальный канал, который делает то же, что и Tap
, но после подписки. Хорошо, например, регистрировать окончательные результаты или отменить подписку после ее завершения.
CatchError
– это конвейер, который изменяет результат, но вызывается только в том случае, если на предыдущем шаге возникла ошибка. Это используется, чтобы избежать необработанной ошибки, и вы должны вернуть наблюдаемое «по умолчанию» вместо ошибочного наблюдаемого (так что мы обрабатываем ошибку, и приложение не ломается).
Вы можете догадаться, когда у вашего наблюдаемого объекта возникла ошибка, если был запущен catchError, и обработать ее сразу, прежде чем она достигнет подписки.
Если этот пайп не запущен, результат считается без ошибок.
person
Ignacio Bustos
schedule
27.06.2018