catchError

Catches errors on the observable to be handled by returning a new observable or throwing an error.

catchError<T, O extends ObservableInput<any>>(selector: (err: any, caught: Observable<T>) => O): OperatorFunction<T, T | ObservedValueOf<O>>

Parameters

selector

a function that takes as arguments err, which is the error, and caught, which is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable is returned by the selector will be used to continue the observable chain.

Returns

OperatorFunction<T, T | ObservedValueOf<O>>: An observable that originates from either the source or the observable returned by the catch selector function.

Description

Examples

Continues with a different Observable when there's an error

import { of } from 'rxjs'; import { map, catchError } from 'rxjs/operators'; of(1, 2, 3, 4, 5).pipe( map(n => { if (n == 4) { throw 'four!'; } return n; }), catchError(err => of('I', 'II', 'III', 'IV', 'V')), ) .subscribe(x => console.log(x)); // 1, 2, 3, I, II, III, IV, V

Retries the caught source Observable again in case of error, similar to retry() operator

import { of } from 'rxjs'; import { map, catchError, take } from 'rxjs/operators'; of(1, 2, 3, 4, 5).pipe( map(n => { if (n === 4) { throw 'four!'; } return n; }), catchError((err, caught) => caught), take(30), ) .subscribe(x => console.log(x)); // 1, 2, 3, 1, 2, 3, ...

Throws a new error when the source Observable throws an error

import { of } from 'rxjs'; import { map, catchError } from 'rxjs/operators'; of(1, 2, 3, 4, 5).pipe( map(n => { if (n == 4) { throw 'four!'; } return n; }), catchError(err => { throw 'error in source. Details: ' + err; }), ) .subscribe( x => console.log(x), err => console.log(err) ); // 1, 2, 3, error in source. Details: four!