Eenmalig werk van iterators in JavaScript
Elke iterator kan slechts één keer
deelnemen aan een lus. Dit is een beetje onverwacht,
maar logisch - een doorlopen iterator
zet zijn done op false,
wat betekent dat hij niet meer herhaald kan worden.
Laten we dit verifiëren. Stel we hebben de volgende generator:
function *func() {
yield 1;
yield 2;
yield 3;
}
Laten we een iterator maken:
let iter = func();
Laten we de iterator herhalen met één lus:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Laten we de iterator nu herhalen met twee lussen:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // werkt niet
}
Om het probleem op te lossen, moet je voor elke nieuwe lus een eigen iterator aanmaken:
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
}
We kunnen het vereenvoudigen:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Verbeter de fout die gemaakt is in de volgende code:
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);
}