Једнократни рад итератора у ЈаваСкрипту
Сваки итератор може учествовати у циклусу
само једном. Ово је помало неочекивано,
али логично - јер прођени итератор
поставља свој done у false,
што значи да више не може да се пребира.
Уверимо се у то. Нека имамо следећи генератор:
function *func() {
yield 1;
yield 2;
yield 3;
}
Направимо итератор:
let iter = func();
Пређимо итератор једним циклусом:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
А сада пређимо итератор два циклуса:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // не ради
}
За решавање проблема треба за сваки нови циклус креирати свој итератор:
let iter1 = func();
for (let elem of iter1) {
console.log(elem); // 1, 2, 3
}
let iter2 = func();
for (let elem of iter2) {
console.log(elem); // 1, 2, 3
}
Можемо поједноставити:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Исправите грешку, коју је допуњено у следећем коду:
function *func() {
for (let i = 1; i <= 3; i++) {
yield i;
}
}
let elems = func();
for (let elem of elems) {
console.log(elem);
}
for (let elem of elems) {
console.log(elem);
}