Recherche…
Introduction
Une fonction async
est une fonction qui renvoie une promesse. await
rendements à l'appelant jusqu'à ce que la promesse se résout puis continue avec le résultat.
Un itérateur permet à la collection d'être bouclée avec une boucle de for-of
by.
Un itérateur asynchrone est une collection où chaque itération est une promesse qui peut être attendue en utilisant une boucle d' for-await-of
.
Les itérateurs asynchrones sont une proposition d'étape 3 . Ils sont en Chrome Canary 60 avec --harmony-async-iteration
Syntaxe
- fonction async * asyncGenerator () {}
- rendement attend asyncOperationWhichReturnsAPromise ();
- pour wait (laisser le résultat de asyncGenerator ()) {/ * result est la valeur résolue de la promesse * /}
Remarques
Itérateur async est un flux de traction déclarative par opposition au flux de poussée déclarative d'un Observable.
Liens utiles
Les bases
Un JavaScript Iterator
est un objet avec une méthode .next()
, qui retourne un IteratorItem
, qui est un objet avec la value : <any>
et done : <boolean>
.
Un JavaScript AsyncIterator
est un objet avec une méthode .next()
, qui renvoie une Promise<IteratorItem>
, une promesse pour la valeur suivante.
Pour créer un AsyncIterator, nous pouvons utiliser la syntaxe du générateur asynchrone :
/**
* 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;
}
}
La fonction delayedRange
prend un nombre maximum et retourne un AsyncIterator
, qui donne des nombres de 0 à ce nombre, à intervalles d'une seconde.
Usage:
for await (let number of delayedRange(10)) {
console.log(number);
}
L' for await of
boucle est une autre nouvelle syntaxe, disponible uniquement à l'intérieur des fonctions asynchrones, ainsi que des générateurs asynchrones. À l'intérieur de la boucle, les valeurs obtenues (qui, rappelons-le, sont des promesses) sont déballées, de sorte que la promesse est cachée. Dans la boucle, vous pouvez traiter les valeurs directes (les numéros), la cédés for await of
boucle attendra les promesses en votre nom.
L'exemple ci-dessus attend 1 seconde, log 0, attend une seconde, log 1, et ainsi de suite jusqu'à ce qu'il enregistre 9. À ce moment, AsyncIterator
sera done
et la boucle for await of
.