传奇在取消时不会结束
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;
}
}
}
测试表明,无论何时取消 运行,旧轮询 运行 都会在不被取消的情况下完成
我写完后解决了我自己的问题。这是一个愚蠢的错字,我在取消方法前错过了我的收益。
我有一个轮询传奇,每 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;
}
}
}
测试表明,无论何时取消 运行,旧轮询 运行 都会在不被取消的情况下完成
我写完后解决了我自己的问题。这是一个愚蠢的错字,我在取消方法前错过了我的收益。