【发布时间】:2021-12-03 23:44:36
【问题描述】:
我正在尝试为我的所有 sagas 创建一个错误拦截器,在分析了 redux-saga eventChannel 之后,我尝试创建一个这样的 saga:
export function interceptor() {
return eventChannel(() => {
api.interceptors.response.use(
(response) => response,
(error) => {
const { response } = error;
if ([401, 403].includes(response.status)) {
emit(AuthCreators.logoutRequest());
}
return Promise.reject(error);
}
);
return () => null;
});
}
在 rootSaga 中是这样调用的:
export default function* rootSaga() {
return yield all([fork(interceptor), anotherSaga, anotherSaga2]);
}
这样,每次我的其他 sagas 有一个 catch 时,拦截器就会被触发,但是我应该触发其他 saga 中的 logoutRequest 的发出不会被触发。
- emit 如何调用其他 saga?
- 这是创建错误拦截器的最佳方式吗?
感激不尽
【问题讨论】:
标签: javascript reactjs react-redux redux-saga