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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow