იტერატორების ერთჯერადი მოქმედება JavaScript-ში
თითოეული იტერატორი შეუძლია მონაწილეობა მიიღოს ციკლში
მხოლოდ ერთხელ. ეს ოდნავ მოულოდნელია,
მაგრამ ლოგიკურია - ყოველივე ამის შემდეგ, გავლილი იტერატორი
აყენებს თავის 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);
}