catchError
function
stable
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 |
Returns
OperatorFunction<T, T | ObservedValueOf<O>>
: A function that returns an Observable that originates from either the source or the Observable returned by the selector
function.
Description
It only listens to the error channel and ignores notifications. Handles errors from the source observable, and maps them to a new observable. The error may also be rethrown, or a new error can be thrown to emit an error from the result.This operator handles errors, but forwards along all other events to the resulting observable. If the source observable terminates with an error, it will map that error to a new observable, subscribe to it, and forward all of its events to the resulting observable.
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!
See Also
© 2015–2021 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
https://rxjs.dev/api/operators/catchError