Вот функция 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
прекрасно работает в обоих случаях.
Это ожидаемое поведение или ошибка?