Частичная итерация генератора, использующего для ... из - PullRequest
2 голосов
/ 21 января 2020

Вот функция test, которая получает первый элемент из последовательности, используя for ... of l oop. И после этого он получает второй предмет:

function test(iterable) {
  const iterator = iterable[Symbol.iterator]();
  for (const item of iterator) {
    console.log('First: ' + item);
    break;
  }
  for (const item of iterator) {
    console.log('Second: ' + item);
    break;
  }
}

function test2(iterable) {
  const iterator = iterable[Symbol.iterator]();
  const item = iterator.next();
  if (!item.done) {
    console.log('First: ' + item.value);
  }
  for (const item of iterator) {
    console.log('Second: ' + item);
    break;
  }
}

const obj = {
  *[Symbol.iterator]() {
    yield* [1, 2, 3, 4, 5];
  }
}

console.log('test:');
test([1, 2, 3, 4, 5]);
test(obj);

console.log('\ntest2:');
test2([1, 2, 3, 4, 5]);
test2(obj);

Отлично работает для массива. Но это не работает для генератора. В последнем случае он не получает второй элемент.

Однако функция test2 прекрасно работает в обоих случаях.

Это ожидаемое поведение или ошибка?

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