取消时,佐贺不会结束

时间:2017-05-10 17:16:19

标签: reactjs redux-saga

我有一个每10秒钟运行一次的投票传奇。当发出UPDATE_DEPLOYMENT请求时,我取消任何正在运行的轮询传奇,清除状态,并触发一个新的轮询(现在轮询一个新的休息端点,因为状态中的site_location值也由UPDATE_DEPLOYMENT更新)。

这似乎不起作用。当前正在运行的轮询传奇在没有被取消的情况下运行完成,最终报告失败,因为它开始触及新的rest url请求仅存在于旧url上的组件,因为site_location状态在其运行的中途被更改。

这是主要的传奇(当发送UPDATE_DEPLOYMENT时,不同的传奇负责更新site_location状态以保持我们所有GUI使用的标准体系结构)

export function* watchPollRequest() {
  let pollTask;

  while (true) {
    const action = yield take([POLL, UPDATE_DEPLOYMENT, REPORT_SUCCESS, REPORT_FAILURE]);

     switch (action.type) {
       case REPORT_SUCCESS:
       case REPORT_FAILURE:
         pollTask = undefined;
         break;
       case UPDATE_DEPLOYMENT:
         if (pollTask) {
            cancel(pollTask);
            pollTask = undefined;
         }
         yield put(clearSummaryData());
         yield put(poll()); 
       case POLL:
         if (pollTask) {
           // only need one poll at a time
           break;
          }
          pollTask = yield fork(onPollRequest);
          break;
      }
    }
  }

测试表明,无论何时取消运行,旧的民意调查都会在没有预定的情况下运行完成

1 个答案:

答案 0 :(得分:1)

写完这篇文章后,我解决了自己的问题。这是一个愚蠢的错字,我在取消方法面前错过了我的收益。