例如,我需要在循环之外缓存最后一个任务(redux-saga)。
select substring(a.b, v.number + 1, 1) letter
from (select 'WCRTV' b) a
join master..spt_values v on v.number < len(a.b)
where v.type = 'P'
在没有export default function* () {
let lastTask;
while (true) {
const action = yield take(someActions);
// some conditions there
if (lastTask) {
yield cancel(lastTask);
}
lastTask = yield fork(send(action));
}
}
的情况下,我应该使用哪种模式以功能不变的方式使其变为正常?
答案 0 :(得分:0)
一种选择是使生成器自己递归yield*
:
function* gen (lastTask) {
const action = yield take(someActions);
// some conditions there
if (lastTask) {
yield cancel(lastTask);
}
const nextLastTask = yield fork(send(action));
yield* gen(nextLastTask);
}
export default gen;
但是请注意,您的原始代码(或此代码)中没有任何内容涉及变异-let
的问题在于它允许重新分配,这在一定程度上相似,但不一样。 (如果可能的话,最好避免变异和重新分配,只要代码易于阅读即可)
当然,请确保使用者调用的gen
没有参数。