Sök…
Introduktion
En async
funktion är en som ger ett löfte. await
avkastning till den som ringer tills löftet löser sig och fortsätter sedan med resultatet.
En iterator gör det möjligt att slinga samlingarna med en for-of
slinga.
En async-iterator är en samling där varje iteration är ett löfte som kan for-await-of
med en for-await-of
slinga.
Async iteratorer är ett steg 3-förslag . De finns i Chrome Canary 60 med --harmony-async-iteration
Syntax
- async-funktion * asyncGenerator () {}
- avkastning väntar på asyncOperationWhichReturnsAPromise ();
- för vänta (låt resultatet av asyncGenerator ()) {/ * resultatet är det upplösta värdet från löfte * /}
Anmärkningar
En async iterator är en deklarativ dragström i motsats till en observerbar deklarativ pushström .
Användbara länkar
Grunderna
En JavaScript Iterator
är ett objekt med en .next()
-metod, som returnerar ett IteratorItem
, som är ett objekt med value : <any>
och done : <boolean>
.
En JavaScript AsyncIterator
är ett objekt med en .next()
-metod, som returnerar ett Promise<IteratorItem>
, ett löfte om nästa värde.
För att skapa en AsyncIterator kan vi använda syntaxen för asyncgenerator :
/**
* Returns a promise which resolves after time had passed.
*/
const delay = time => new Promise(resolve => setTimeout(resolve, time));
async function* delayedRange(max) {
for (let i = 0; i < max; i++) {
await delay(1000);
yield i;
}
}
Funktionen delayedRange
tar ett maximalt antal och returnerar en AsyncIterator
, som ger siffror från 0 till det numret i intervaller på 1 sekund.
Användande:
for await (let number of delayedRange(10)) {
console.log(number);
}
for await of
slingan är ytterligare ett stycke ny syntax, som endast finns inuti async-funktioner, liksom asyncgeneratorer. Inuti slingan tas värdena (som, kom ihåg, är löften) upp, så löftet är gömt bort. Inom slingan kan du hantera de direkta värdena (de avgivna siffrorna), slingans for await of
kommer att vänta på löften för dina räkning.
Exemplet ovan kommer att vänta 1 sekund, logga 0, vänta ytterligare en sekund, log 1, och så vidare, tills det loggar 9. Vid vilken AsyncIterator
kommer AsyncIterator
att done
, och for await of
slingan kommer att avsluta.