如何通过Redux-Observable + RxJS + Axios设置捕获超时错误?

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

使用Redux-Observable + RxJS + Axios,当呼叫超时时返回的错误不包含任何状态码等。整个错误响应的整体为[TimeoutError: Timeout has occurred]。如何在该响应中捕获错误以显示通知?史诗如下:

const fetchUserEpic = (action$, state$) =>
  action$.pipe(
    ofType('FETCH_USER'),
    mergeMap(() =>
      from(axios.get(`/user/`)).pipe(
        timeout(5000),
        map(response => ({
          type: 'FETCH_USER_SUCCESS',
          data: response.data
        })),
        catchError(error =>
          of({
            type: 'FETCH_USER_ERROR',
            error
          })
        )
      )
    )
  );
rxjs axios redux-observable
1个回答
0
投票

传递到error处理程序的catchError对象具有两个字符串属性:messagename

整个对象基本上看起来像这样:

{
    message: 'Timeout has occurred',
    name: 'TimeoutError'
}

请参见TimeoutError.ts implementation以供参考。

因此可以明显地处理rxjs超时,您可以检查:

.catchError(error => {
    if (error.name === 'TimeoutError') {
        // handle rxjs timeout
    }
    ...
})

(至少这是我针对与您非常相似的用例所做的事情。)

© www.soinside.com 2019 - 2024. All rights reserved.