我有一个每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;
}
}
}
测试表明,无论何时取消运行,旧的民意调查都会在没有预定的情况下运行完成
答案 0 :(得分:1)
写完这篇文章后,我解决了自己的问题。这是一个愚蠢的错字,我在取消方法面前错过了我的收益。