reactjs - 为什么无法在 redux-saga 生成器中捕获错误?
问题描述
这里是 store/store.js
...
const initSagaMiddleware = createSagaMiddleware();
const middlewares = [initSagaMiddleware, fetchPhotosMiddleware, putPhotoMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
...
initSagaMiddleware.run(rootSaga);
export default store;
传奇/api-saga.js
export default function* rootSaga() {
yield all([
photoWatcher()
]);
}
function* photoWatcher() {
yield takeEvery(PUT_PHOTO, putPhotoWorker);
}
function* putPhotoWorker(action) {
try {
const payload = yield call(putPhoto, action.urlParams, action.body);
yield put({ type: PHOTO_UPDATED, payload });
} catch (err) {
yield put({ type: API_ERROR_PUT_PHOTO, payload: err });
}
}
和服务/api.js
export function putPhoto(urlParams, body) {
return axios.put('/abc/' + urlParams.key + '/def/' + urlParams.id + '/edit', body)
.then(res => {
return res.data;
})
.catch(err => err);
}
我的问题是:即使我从 api 调用中得到错误,redux-saga put
tingPHOTO_UPDATED
而不是API_ERROR_PUT_PHOTO
. 我究竟做错了什么?如何捕捉错误?
解决方案
问题是您试图两次捕获相同的错误。只需从函数中删除捕获putPhoto
,它应该可以工作。
export function putPhoto(urlParams, body) {
return axios.put('/abc/' + urlParams.key + '/def/' + urlParams.id + '/edit', body)
.then(res => {
return res.data;
});
}
推荐阅读
- swift - 使用 SpriteKit 在 iPhoneX 上的屏幕尺寸问题
- ios - NavigationLink 无法正确加载我的个人视图 (SwiftUI)
- python - 无法通过 setup.py 正确安装我的脚本
- python-3.x - 使用 Google API 客户端默认凭据创建 Blogger API 端点时出错
- javascript - React 路由器未在 Redirect 上加载组件
- python - 从给出重复项运行的序言中的查询
- java - 在 ExpandableListView 中单击 onChildClick 后,如何在没有将 ExpandableListView 附加到新 Activity 的情况下移动到新 Activity
- bash - bash + 将文本文件转换为 csv 文件
- javascript - 我想创建一个函数,将时间与一组 div 类进行比较(如果措辞不正确,编码是新手)
- javascript - 组件在本机反应中未按预期呈现图像