JS: недопустимый оператор возврата при закрытии итератора с помощью цикла for - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь сломать итератор пораньше и вернуть результат, но получил Illegal return statement ошибку.

const gen = function *(){
  yield 1;
  yield 2;
  yield 3;
}
for (let i of gen()) {
  console.log(i)
  return i
}

Из MDN документ

В для ... циклов резкое завершение итерации может быть вызвано прерыванием, броском или возвратом. В этих случаях итератор закрывается.

В то время как break и throw работают как положено.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Ваш оператор возврата не находится внутри функции. Это работает:

const gen = function *(){
  yield 1;
  yield 2;
  yield 3;
}

function doLoop() {
  for (let i of gen()) {
    console.log(i)
    return i
  }
}

doLoop()

Вы получите ту же ошибку, если просто наберете return. Речь идет о том, где выполняется return и не имеет ничего общего с генераторами.

0 голосов
/ 02 апреля 2020

Ваш return находится вне функции генератора. Вы не разбиваете генераторы вне их, потому что для этого есть очень мало причин.

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