Zoeken…


Invoering

Een async functie is er een die een belofte teruggeeft. await opbrengsten op de beller af totdat de belofte is opgelost en vervolgens doorgaat met het resultaat.

Met een iterator kan de verzameling worden doorgelust met een for-of lus.

Een async-iterator is een verzameling waarbij elke iteratie een belofte is waarop kan worden gewacht met behulp van een lus in for-await-of .

Async iterators zijn een fase 3-voorstel . Ze zijn in Chrome Canary 60 met --harmony-async-iteration

Syntaxis

  • async-functie * asyncGenerator () {}
  • opbrengst wacht asyncOperationWhichReturnsAPromise ();
  • voor wachten (resultaat van asyncGenerator ()) {/ * resultaat is de opgeloste waarde van de belofte * /}

Opmerkingen

Een asynchrone iterator is een declaratieve pull-stream in tegenstelling tot de declaratieve push- stream van Observable.

Basics

Een JavaScript Iterator is een object met de methode .next() , die een IteratorItem retourneert, een object met de value : <any> en done : <boolean> .

Een JavaScript AsyncIterator is een object met de methode .next() , die een Promise<IteratorItem> retourneert, een belofte voor de volgende waarde.

Om een AsyncIterator te maken, kunnen we de syntaxis van de async-generator gebruiken :

/**
 * 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;
  }
}

De functie delayedRange neemt een maximumaantal en retourneert een AsyncIterator , die getallen oplevert van 0 tot dat nummer, met intervallen van 1 seconde.

Gebruik:

for await (let number of delayedRange(10)) {
  console.log(number);
}

De for await of loop is een nieuw stukje nieuwe syntax, alleen beschikbaar binnen async-functies, evenals async-generators. Binnen de lus worden de toegekende waarden (wat, denk eraan, beloften zijn) uitgepakt, dus de belofte is verborgen. Binnen de lus kun je omgaan met de directe waarden (de toegekende getallen), de for await of lus wacht namens jou op de beloften.

Het bovenstaande voorbeeld wacht 1 seconde, log 0, wacht nog een seconde, log 1, en ga zo maar door, totdat hij logt 9. Op welk punt de AsyncIterator zal worden done , en het for await of lus af te sluiten.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow