Generator : 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 septembre 2016.
La méthode throw() des instances de Generator agit comme si une instruction throw était insérée dans le corps du générateur à la position actuelle de suspension, ce qui informe le générateur d'une condition d'erreur et permet au générateur de gérer l'erreur, ou d'effectuer un nettoyage et de se fermer.
Syntaxe
generatorInstance.throw(exception)
Paramètres
Valeur de retour
Si l'exception levée est interceptée par un bloc try...catch et que le générateur reprend pour produire d'autres valeurs, il retourne un Object avec deux propriétés :
Exceptions
TypeError-
Levée si le générateur est déjà en cours d'exécution.
Si l'exception n'est pas interceptée par un bloc try...catch à l'intérieur de la fonction génératrice, elle est également levée vers l'appelant de throw().
Description
La méthode throw(), lorsqu'elle est appelée, agit comme si une instruction throw exception; était insérée dans le corps du générateur à la position de suspension actuelle, où exception est l'exception passée à la méthode throw(). Ainsi, dans un flot typique, appeler throw(exception) fait lever une exception par le générateur. Cependant, si l'expression yield est enveloppée dans un bloc try...catch, l'erreur peut être interceptée et le flot d'exécution peut soit reprendre après la gestion de l'erreur, soit se terminer proprement.
Exemples
Utiliser la méthode throw()
Dans l'exemple suivant, on utilise un générateur simple et on génère une exception grâce à la méthode throw. Une exception peut être interceptée avec un bloc try...catch usuel.
function* gen() {
while (true) {
try {
yield 42;
} catch (e) {
console.log("Erreur interceptée !");
}
}
}
const g = gen();
g.next();
// { value: 42, done: false }
g.throw(new Error("Quelque chose s'est mal passé"));
// "Erreur interceptée !"
// { value: 42, done: false }
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-generator.prototype.throw |
Compatibilité des navigateurs
Voir aussi
- La déclaration
function*