Избавьтесь от изменчивого `let` - PullRequest
0 голосов
/ 20 апреля 2019

Например, мне нужно кэшировать последнюю задачу вне цикла (redux-saga).

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));
  }
}

Какой шаблон я должен использовать там, чтобы сделать его функционально неизменным без let?

1 Ответ

0 голосов
/ 20 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...