JavaScript-те итераторлардың бір реттік жұмысы
Әрбір итератор циклде тек бір рет ғана қатыса алады.
Бұл сәл күтпеген жайт, бірақ логикалық - өйткені өткен итератор
өзinin 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);
}