Operasi Sekali Pakai Iterator dalam JavaScript
Setiap iterator hanya dapat berpartisipasi dalam loop
sekali saja. Ini sedikit tak terduga,
tapi logis - karena iterator yang telah dilewati
akan mengatur done-nya menjadi false,
yang berarti tidak dapat lagi diiterasi.
Mari kita buktikan. Anggaplah kita memiliki generator berikut:
function *func() {
yield 1;
yield 2;
yield 3;
}
Mari buat iterator:
let iter = func();
Mari iterasi iterator dengan satu loop:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Sekarang mari iterasi iterator dengan dua loop:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // tidak bekerja
}
Untuk menyelesaikan masalah ini, setiap loop baru perlu membuat iteratornya sendiri:
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
}
Kita bisa menyederhanakannya:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Perbaiki kesalahan yang dilakukan dalam kode berikut:
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);
}