Javascript 如何停止重复操作?当我出错时

Javascript 如何停止重复操作?当我出错时,javascript,reactjs,redux,react-redux,redux-saga,Javascript,Reactjs,Redux,React Redux,Redux Saga,如果getPost函数的yield调用(刷新)中发生错误,则无论是否发生错误,getPost_请求操作都将继续 但是,如果getPost函数中发生错误,我不希望该操作继续运行,并像这样停止和结束 yield put({ type: REFRESH_FAILURE, error: err.response.data, }); 这是我的代码,我如何修复 function getPostAPI(data) { ret

如果getPost函数的yield调用(刷新)中发生错误,则无论是否发生错误,getPost_请求操作都将继续

但是,如果getPost函数中发生错误,我不希望该操作继续运行,并像这样停止和结束

    yield put({
          type: REFRESH_FAILURE,
          error: err.response.data,
        });
这是我的代码,我如何修复

    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) {
        if (err.response.data === "jwtEx") {
          yield call(refresh);      // if this error i want to stop .

        
          yield put(action);
        } else {
          yield put({
            type: GETPOST_FAILURE,
            error: err.response.data,
          });
        }
      }
    }

    function refreshAPI() {
      // console.log('data::', data);
      return axiosInstace.post("/kakao/refresh");
    }

    function* refresh() {
      try {
        const result = yield call(refreshAPI);
        yield AsyncStorage.setItem(
          "accesstoken",
          `${result.data.accessToken}`,
          () => {
            // console.log('accesstoken 재발급 저장 완료');
            console.log("accesstoken3333333333333333333", result.data.accessToken);
          }
        );
        yield put({
          type: REFRESH_SUCCESS,
          data: result.data,
        });
      } catch (err) {
        console.log("refresh err.response.data:", err.response.data);
        yield put({
          type: REFRESH_FAILURE,
          error: err.response.data,
        });
      }
    }

您可以通过执行以下操作对代码进行小的更新:

  • 刷新
    生成器函数返回
    布尔值

    布尔值将是:

    • true
      如果
      刷新
      成功
    • false
      如果
      刷新失败
  • 设置
    收益调用(刷新)
    const
    声明以捕获此返回的
    布尔值

  • 如果捕获的
    布尔值
    ,则通过
    返回
    提前退出生成器功能

请尝试下面的代码

函数getPostAPI(数据){ 返回axiosInstace.post('/kakao/getpost',数据); } 函数*getPost(操作){ 试一试{ const result=yield调用(getPostAPI,action.data); 收益率看跌期权({ 类型:GETPOST_SUCCESS, 数据:result.data, }); }捕捉(错误){ 如果(err.response.data=='jwtEx'){ const refreshSuccess=yield call(刷新); 如果(!刷新成功){ 返回; } 让与(行动); }否则{ 收益率看跌期权({ 类型:GETPOST_故障, 错误:err.response.data, }); } } } 函数refreshAPI(){ 返回axiosInstace.post('/kakao/refresh'); } /** *@returns{boolean} *-`true`如果刷新成功 *-`false`如果刷新失败 */ 函数*refresh(){ 让我们取得成功; 试一试{ const result=yield调用(refreshAPI); 生成AsyncStorage.setItem( “accesstoken”, `${result.data.accessToken}`, () => { //console.log('accesstoken재발급 저장 완료'); log('accessToken3333',result.data.accessToken); } ); 收益率看跌期权({ 类型:刷新\u成功, 数据:result.data, }); 成功=真; }捕捉(错误){ log('refresh err.response.data:',err.response.data'); 收益率看跌期权({ 类型:刷新失败, 错误:err.response.data, }); 刷新成功=错误; }最后{ 回归成功; } }