首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免多次请求氧化还原操作?

如何避免多次请求氧化还原操作?
EN

Stack Overflow用户
提问于 2021-05-10 12:39:11
回答 1查看 24关注 0票数 0

如果在执行getPost函数时发生错误,我希望通过catch (err)运行REFRESH_REQUEST,当REFRESH_SUCCESS完成时,我希望再次运行GETPOST_REQUEST。

但是,在我的代码中,GETPOST_REQUEST和REFRESH_REQUEST运行多次,GETPOST_GETPOST_SUCCESS首先成功。

但是,我希望这两个请求都只执行一次,并且REFRESH_SUCCESS首先成功,然后第二次我希望GETPOST_SUCCESS成功。

这是我的代码,我如何修复我的代码?

代码语言:javascript
复制
    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,
        });
      }
    }
EN

回答 1

Stack Overflow用户

发布于 2021-05-10 13:21:30

使用接口调用的status维护reducer,如下所示

最初,store包含的状态等于initial

因此,当一个action调用时,将状态设为正在加载,如果已经处于正在加载状态,则不要调用操作。

注意:我用redux-thunk的方式解释了这段代码,但是试着理解其中的逻辑,它在任何地方都是一样的。

我希望你能理解

代码语言:javascript
复制
type status = 'initial' | 'loading' | 'success' | 'error';

const initialState = {
  status: 'initial'
}

getPost错误函数中,您可以检查接口的状态...

代码语言:javascript
复制
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;
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67464842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档