Jednokratni rad iteratora u JavaScript-u
Svaki iterator može da učestvuje u ciklusu
samo jednom. Ovo je pomalo neočekivano,
ali logično - jer završeni iterator
postavlja svoje done na false,
što znači da se više ne može prebirati.
Uverimo se u ovo. Neka imamo sledeći generator:
function *func() {
yield 1;
yield 2;
yield 3;
}
Napravimo iterator:
let iter = func();
Prođimo kroz iterator jednim ciklusom:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
A sada prođimo kroz iterator dva ciklusa:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // ne radi
}
Za rešenje problema potrebno je za svaki novi ciklus napraviti svoj iterator:
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
}
Možemo pojednostaviti:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Ispravite grešku koju ste napravili u sledećem kodu:
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);
}