Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

AsyncGenerator : méthode throw()

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨janvier 2020⁩.

La méthode throw() des instances d'AsyncGenerator agit comme si une instruction throw était insérée dans le corps du générateur à la position actuelle où il est suspendu, ce qui signale au générateur une condition d'erreur et lui permet de gérer l'erreur, ou d'effectuer un nettoyage et de se fermer.

Syntaxe

js
asyncGeneratorInstance.throw(exception)

Paramètres

exception

L'exception à lancer. Pour le débogage, il est utile qu'elle soit une instance de Error.

Valeur de retour

Si l'erreur lancée n'est pas capturée, la méthode retourne une promesse (Promise) qui est rejetée avec l'exception passée.

Si l'exception est capturée par un bloc try...catch et que le générateur reprend pour produire d'autres valeurs, la méthode retourne une promesse (Promise) qui est résolue avec un objet Object possédant deux propriétés :

done

Une valeur booléenne :

  • true si le flux de contrôle de la fonction génératrice a atteint la fin.
  • false si la fonction génératrice peut produire d'autres valeurs.
value

La valeur produite par la prochaine expression yield.

Exemples

Utilisation de throw()

L'exemple suivant montre un générateur et une erreur lancée avec la méthode throw. Une erreur peut être capturée par un bloc try...catch comme d'habitude.

js
// Une tâche asynchrone. Imaginez qu'elle fasse quelque chose
// de plus utile en pratique.
function attendre(temps) {
  return new Promise((resolution, rejet) => {
    setTimeout(resolution, temps);
  });
}

async function* creerGenerateurAsync() {
  while (true) {
    try {
      await attendre(500);
      yield 42;
    } catch (e) {
      console.error(e);
    }
  }
}

const asyncGen = creerGenerateurAsync();
asyncGen.next(1).then((res) => console.log(res)); // { value: 42, done: false }
asyncGen
  .throw(new Error("Une erreur s'est produite")) // Error: Une erreur s'est produite
  .then((res) => console.log(res)); // { value: 42, done: false }

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-asyncgenerator-prototype-throw

Compatibilité des navigateurs

Voir aussi