Funksionimi një herë i përsëritësve në JavaScript
Çdo përsëritës mund të marrë pjesë në një cikël
vetëm një herë. Kjo është pak e papritur,
por logjike - në fund të fundit, përsëritësi i përshkuar
e vendos done të tij në false,
që do të thotë se nuk mund të përsëritet më.
Le ta verifikojmë këtë. Le të kemi gjeneruesin e mëposhtëm:
function *func() {
yield 1;
yield 2;
yield 3;
}
Le të krijojmë një përsëritës:
let iter = func();
Le të përsërisim përsëritësin me një cikël:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Tani le të përsërisim përsëritësin me dy cikle:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // nuk funksionon
}
Për të zgjidhur problemin, duhet për çdo cikël të ri të krijohet përsëritësi i vet:
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
}
Mund ta thjeshtojmë:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Korrigjojeni gabimin e bërë në kodin e mëposhtëm:
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);
}