Уроки34. catchError: fallback вместо падения
Уроки · 34
34. catchError: fallback вместо падения
catchError — перехват и замена
Когда в потоке возникает ошибка, она «летит» сверху вниз через pipe, пока не встретит catchError. Этот оператор работает так:
- Получает объект ошибки.
- Должен вернуть новый Observable — что-то, что заменит упавший источник.
- Подписчик получает значения уже из этого нового Observable, как будто ничего не случилось.
source$.pipe(
catchError(err => of('Fallback'))
)
// source$ упал → next('Fallback') → complete()
Что такое fallback
Fallback (англ. «запасной вариант») — безопасное значение, на которое можно опереться при ошибке: пустой список, дефолтные настройки, кэшированный результат. Цель — чтобы UI не «умирал», а продолжал работать с пустыми/безопасными данными.
Что нужно сделать
- После
map(...)внутриpipeдобавьте через запятуюcatchError(error => of('Fallback value')). - Ожидаемый вывод:
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
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...