Один вариант - рекурсивно иметь генератор 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
без аргументов, конечно.