BACK
Уроки34. catchError: fallback вместо падения
Уроки · 34

34. catchError: fallback вместо падения

catchError — перехват и замена

Когда в потоке возникает ошибка, она «летит» сверху вниз через pipe, пока не встретит catchError. Этот оператор работает так:

  1. Получает объект ошибки.
  2. Должен вернуть новый Observable — что-то, что заменит упавший источник.
  3. Подписчик получает значения уже из этого нового Observable, как будто ничего не случилось.
source$.pipe(
  catchError(err => of('Fallback'))
)
// source$ упал → next('Fallback') → complete()

Что такое fallback

Fallback (англ. «запасной вариант») — безопасное значение, на которое можно опереться при ошибке: пустой список, дефолтные настройки, кэшированный результат. Цель — чтобы UI не «умирал», а продолжал работать с пустыми/безопасными данными.

Что нужно сделать

  1. После map(...) внутри pipe добавьте через запятую catchError(error => of('Fallback value')).
  2. Ожидаемый вывод: 1, 2, 3, Fallback value, Complete. Заметьте: 5 не появилось — поток уже заменён фоллбеком.
Решение spoiler · click to reveal
const { of, map, catchError } = Rx;

const source$ = of(1, 2, 3, 4, 5);

const result$ = source$.pipe(
  map(value => {
    if (value === 4) {
      throw 'Boom';
    }
    return value;
  }),
  catchError(error => {
    return of('Fallback value');
  })
);

result$.subscribe({
  next: value => console.log(value),
  error: error => console.log('Global Error: ' + error),
  complete: () => console.log('Complete'),
});
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...