请求失败后可观察到的catchError(axios / redux)

问题描述 投票:0回答:1

INTRO:

我在reactjs中有一个应用程序,使用redux,redux-observable和axios-observable。

我遇到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

问题:

我如何检查错误,但仍然向redux可观察的史诗抛出错误?

reactjs redux rxjs axios redux-observable
1个回答
0
投票

[throwError仅在RX链中有效,请尝试使用本机JS throw

Axios.interceptors.response.use(response => {
    console.log(`[response] --> ${response.status}`)
    return response;
}, error => {
    console.log(`[error] --> ${error}`)
    throw error
})
© www.soinside.com 2019 - 2024. All rights reserved.