Оператор catchError
напрямую не перехватывает ошибки так же, как и исключения, используя оператор try
/ catch
.
Внутренне он подписывается на источник, наблюдаемый для него.применяется и отражает исходные уведомления next
и complete
- то есть эти уведомления проходят через оператора без изменений.
Однако, если оператор получает уведомление error
, он передает ошибкупредоставленный обратный вызов, предоставляющий вызывающему оператору возможность обработать ошибку.
Уведомление error
может быть выполнено в наблюдаемой реализации путем вызова метода error
подписчика, например:
const source = new Observable<string>(subscriber => {
subscriber.error(new Error'Kaboom!'));
});
Здесь не выдается исключение, и try
/ catch
не требуется.Ошибка передается подписчику - оператор catchError
подписывается на источник, поэтому это подписчик - с помощью его метода error
.
Так использовалась функция throwError
в вопросе реализовано .
Уведомление error
также можно выполнить, вызвав исключение, например:
const source = new Observable<string>(subscriber => {
throw new Error('Kaboom!');
});
Здесь try
/ catch
оператор в реализации Observable.subscribe
перехватит исключение и передаст подписчику уведомление об ошибке, вызвав метод error
подписчика.
Перехват брошенногоИсключением является ответственность Observable
и реализаций операторов.
Везде, где передаются пользовательские функции - например, в таких операторах, как map
- вызовы этих функций заключены в try
/ catch
операторов и любые обнаруженные исключения передаются подписчику в виде error
уведомлений через метод error
подписчика.