Iterátor je objekt, který v sobě má v sobě funkci next(), která vrací další object
- má done: false → může se pokračovat
- done: true → konec
Generátor generuje iterátor
function* gen() {
yield 1
yield 2
yield 3
}
for(const n of gen()) {
console.log(n);
}Generátor
Generátor se na yield zastaví a pokračuje jakmile je někde zavolán znovu
- zapisuje se speciálně pomocí hvězdičky
- na
yieldse zastaví, vrátí hodnotu a při opětovné zavolání “pokračuje” - generátor je iterovatelný objekt
- a jde přes něj iterovat pomocí
for...ofcyklu - vrací totiž objekt typu
Iterator
- a jde přes něj iterovat pomocí
- využití genetárorů v praxi:
- lazy evaluation (vrátí hodnotu až v momentě zavolání)
- zpracování velkých dat (není potřeba je celé nahrávat do paměti)
- v asynchronním zpracování
- existují i
async function*() {}, které kombinují výhody async/await a generátorů- výhodné pro streamování dat (
yield await fetchData(1))
- výhodné pro streamování dat (
- existují i
function* makeZahlenIterator() {
let zahl = 0
while(zahl <= 50) {
yield zahl
zahl += 10
}
}
const zahlenIterator = makeZahlenIterator()
for(const z of zahlenIterator) {
console.log(z)
}