传奇在取消时不会结束

Saga doesn't end when canceled

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

这似乎不起作用。当前 运行ning 轮询传奇 运行 没有被取消,最终报告失败,因为它开始触及新的 rest url 请求仅存在于旧 [=25] 上的组件=] 由于 site_location 状态在 运行 的中途发生了变化。

这是主要的 saga(另一个 saga 负责在发送 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;
      }
    }
  }

测试表明,无论何时取消 运行,旧轮询 运行 都会在不被取消的情况下完成

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