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 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow