如果在执行getPost函数时发生错误,我希望通过catch (err)运行REFRESH_REQUEST,当REFRESH_SUCCESS完成时,我希望再次运行GETPOST_REQUEST。
但是,在我的代码中,GETPOST_REQUEST和REFRESH_REQUEST运行多次,GETPOST_GETPOST_SUCCESS首先成功。
但是,我希望这两个请求都只执行一次,并且REFRESH_SUCCESS首先成功,然后第二次我希望GETPOST_SUCCESS成功。
这是我的代码,我如何修复我的代码?
function getPostAPI(data) {
return axiosInstace.post('/kakao/getpost', data);
}
function* getPost(action) {
try {
const result = yield call(getPostAPI, action.data);
yield put({
type: GETPOST_SUCCESS,
data: result.data,
});
} catch (err) {
yield put({
type: REFRESH_REQUEST,
});
yield put({
type: GETPOST_REQUEST,
data: action.data,
});
}
}
function refreshAPI() {
return axiosInstace.post('/kakao/refresh');
}
function* refresh() {
try {
const result = yield call(refreshAPI);
AsyncStorage.setItem('accesstoken', `${result.data.accessToken}`, () => {});
yield put({
type: REFRESH_SUCCESS,
data: result.data,
});
} catch (err) {
yield put({
type: REFRESH_FAILURE,
error: err.response.data,
});
}
}发布于 2021-05-10 13:21:30
使用接口调用的status维护reducer,如下所示
最初,store包含的状态等于initial
因此,当一个action调用时,将状态设为正在加载,如果已经处于正在加载状态,则不要调用操作。
注意:我用redux-thunk的方式解释了这段代码,但是试着理解其中的逻辑,它在任何地方都是一样的。
我希望你能理解
type status = 'initial' | 'loading' | 'success' | 'error';
const initialState = {
status: 'initial'
}在getPost错误函数中,您可以检查接口的状态...
const getPost = () => {
return (dispatch, getState) => {
const state = getState();
GETPOST_REQUEST;
try {
GETPOST_SUCCESS;
} catch(error) {
GETPOST_ERROR;
if (state.status !== 'loading') {
dispatch(refresh())
}
}
}
}
const refresh = () => {
return (dispatch, getState) => {
const state = getState();
REFRESH_REQUEST;
try {
REFRESH_SUCCESS;
dispatch(getPost())
} catch(error) {
REFRESH_ERROR;
}
}
}https://stackoverflow.com/questions/67464842
复制相似问题