【发布时间】:2019-08-05 19:57:55
【问题描述】:
这里是 store/store.js
...
const initSagaMiddleware = createSagaMiddleware();
const middlewares = [initSagaMiddleware, fetchPhotosMiddleware, putPhotoMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
...
initSagaMiddleware.run(rootSaga);
export default store;
sagas/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 putting PHOTO_UPDATED 而不是 API_ERROR_PUT_PHOTO。我究竟做错了什么?如何捕捉错误?
【问题讨论】:
-
问题是你在
putPhoto函数中发现了错误。只需取下锁扣,它应该可以工作。大概吧。 -
不。它没有工作:/
-
API 会报错吗?
-
当然。 400 错误请求。
-
如果在putPhoto函数中留下promise
catch,错误发生时会调用catch回调吗? (把console.log或者smth放进去检查)。
标签: reactjs react-redux axios redux-saga