наблюдаемое catchError после сбоя запроса (axios / redux) - PullRequest
1 голос
/ 01 ноября 2019

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 моего эпоса.

ВОПРОС:

Как я могу перехватить ошибку,но все же выкинуть ошибку в наблюдаемую редуксом эпопею?

1 Ответ

1 голос
/ 01 ноября 2019

throwError работает только в цепочке RX, попробуйте использовать собственный JS throw

Axios.interceptors.response.use(response => {
    console.log(`[response] --> ${response.status}`)
    return response;
}, error => {
    console.log(`[error] --> ${error}`)
    throw error
})
...