React Rxjs:catchError不从后端返回数据

时间:2018-09-17 20:04:36

标签: reactjs react-redux rxjs

我正在将Rxjs与React(TS)一起使用,在我的史诗中,我有switchMap,我在其中调用API。然后是map和catchErrors,我想将错误响应传递给我的reducer,但是它不起作用。

我找到了以下示例:https://redux-observable.js.org/docs/recipes/ErrorHandling.html

所以我用了它:

switchMap((action) => from(Currencies.getAll(action.payload)).pipe(
    map((currencies: any) => {
        return ({type: FETCH_CURRENCIES_SUCCESS, payload: {
            name: action.payload,
            currencies: currencies,
        }});
    }),
    catchError(error => of({
        type: SEND_CURRENCIES_ERROR,
        payload: error.xhr.response,
        error: true,
    }))
))

,我的后端返回错误的422代码。它达到catchErrors并将有效负载传递给减速器,但是如果我执行console.log,我会看到标准错误消息:

Error: Request failed with status code 422
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

在“网络”标签中,我看到红色请求和“预览”标签中的错误,状态,标题等都是从后端返回的。如何在我的史诗中获取这些数据?

1 个答案:

答案 0 :(得分:0)

Ofc真是愚蠢的事情。我在项目中使用axios,在错误响应中,显然没有xhr对象。只需将catchError中的有效负载替换为:

payload: error.response.data,