使用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
})
)
)
)
);
传递到error
处理程序的catchError
对象具有两个字符串属性:message
和name
。
整个对象基本上看起来像这样:
{
message: 'Timeout has occurred',
name: 'TimeoutError'
}
请参见TimeoutError.ts implementation以供参考。
因此可以明显地处理rxjs超时,您可以检查:
.catchError(error => {
if (error.name === 'TimeoutError') {
// handle rxjs timeout
}
...
})
(至少这是我针对与您非常相似的用例所做的事情。)