An yra objektas su metodu, grąžinančiu . Objektas yra , jei jis turi metodą — tai padaro ir spread veikiančius. A () yra patogus būdas sukurti iteratorius, kurie gali su .
An yra objektas su metodu, grąžinančiu . Objektas yra , jei jis turi metodą — tai padaro ir spread veikiančius. A () yra patogus būdas sukurti iteratorius, kurie gali su .
next(){ value, done }[Symbol.iterator]for...offunction*yieldfunction* idGenerator() {
let id = 1;
while (true) { // infinite, but lazy — only computes on demand
yield id++; // pause here, return a value, resume on next()
}
}
const gen = idGenerator();
gen.next().value; // 1
gen.next().value; // 2 — execution resumed where it paused
Pagrindinė idėja: vykdymas pristabdo ties kiekvienu yield ir atsitinka tolimesniu .next(), išsaugojant lokalią būseną tarp skambučių. Nieks nėra apskaičiuojamas, kol to neprašote.
// process a huge/infinite sequence without building it all in memory
function* take(iterable, n) {
let i = 0;
for (const x of iterable) {
if (i++ >= n) return;
yield x;
}
}
[...take(idGenerator(), 3)]; // [1, 2, 3] — from an infinite generator
const range = {
from: 1, to: 3,
*[Symbol.iterator]() { for (let i = this.from; i <= this.to; i++) yield i; },
};
[...range]; // [1, 2, 3] — works with for...of and spread
Generatoriai leidžia vėlas/begalines sekas, pasirinktą iteraciją ir atmintį efektyvų srautą.
Jie taip pat buvo ankstyvų async bibliotekų (co) pagrindas ir yra async iteracijos pagrindas (for await...of).
Iteratoriaus protokolas yra tai, kas suvienija for...of, spread ir destructuring per masyvu, Maps, Sets ir eilutes.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti