Получение возвращаемого значения генератора через итерацию - PullRequest
0 голосов
/ 12 апреля 2019

Мне трудно примирить эти два:

const gen = function *() {
  yield 3;
  yield 4;
  return 5;
};

const rator = gen();

console.log(rator.next());  //  { value: 3, done: false }
console.log(rator.next());  //  { value: 4, done: false }
console.log(rator.next());  //  { value: 5, done: true }

Выше мы видим все 3 значения, если мы вызываем next () в четвертый раз, мы получаем:

{ value: undefined, done: true }

, что имеет смысл. Но теперь, если мы используем его в цикле:

for(let v of gen()){
  console.log('next:', v); // next: 3, next: 4
}

Наверное, я запутался, почему использование цикла for не выводит next: 5, но вызов next () для итератора вручную может получить значение return. Кто-нибудь может объяснить, почему это так?

Другими словами, я бы ожидал, что for loop напечатает next: 5, но это не так.

1 Ответ

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

Для согласованности, это работает?

const gen = function *() {
  yield 3;
  yield 4;
  return yield 5;
};

ключевое слово return сейчас, похоже, ничего не делает.

...