JavaScript Les bases


Exemple

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 .