INTRO:
У меня есть приложение вactjs, использующее избыточность, наблюдение за редуксом и наблюдение за аксиосами.
У меня возникла проблема с обработкой ошибок HTTP.
Давайте возьмем следующую эпопею:
const loginRequest = (action$, state$) => action$.pipe(
ofType(UsersActions.loginRequest),
switchMap((action: {payload:{email: string, password: string}}) =>
HttpService.PostAsync<any>('token-auth', action.payload).pipe(
map(response => {
// blabla
}),
catchError((error: string) => {
// blabla
})
)
)
);
HttpService выглядит следующим образом
public static PostAsync<T>(targetApi: string, data: any, basePath?: string): AxiosObservable<T> {
return Axios.post(this.getBaseUrl(targetApi, basePath), data);
}
Так что это работает правильно, если почтовый запрос завершится неудачно, я попаду вcatchError
, если это не так, я вхожу в нормальное состояние map
.
ПРОБЛЕМА:
Я хотел бы перехватить ответ, чтобы добавитьглобальная обработка ошибок приложения, я установил следующую функцию:
Axios.interceptors.response.use(response => {
console.log(`[response] --> ${response.status}`)
return response;
}, error => {
console.log(`[error] --> ${error}`)
return throwError(error);
})
Теперь я могу видеть журнал, ошибку или ответ в зависимости от результата HTTP-запроса. НО, Я ВСЕГДА войду в map
, и никогда в catchError
моего эпоса.
ВОПРОС:
Как я могу перехватить ошибку,но все же выкинуть ошибку в наблюдаемую редуксом эпопею?