Comment implémenteriez-vous différents types d'erreurs, pour pouvoir en détecter certaines et en laisser d'autres bouillonner…?
Une façon d'y parvenir est de modifier le prototype de l' Error
objet:
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
Attraper une erreur spécifique:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
Avez-vous des alternatives?
javascript
error-handling
cllpse
la source
la source
Error
a des problèmes. Voir stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
c'est qu'il ne fonctionnera pas dans IE7, ce qui soulève l'erreur «Exception levée et non interceptée». Voici l'explication extrêmement stupide (comme toujours) de msdn: "Vous avez inclus une instruction throw, mais elle n'était pas incluse dans un bloc try, ou il n'y avait pas de bloc catch associé pour intercepter l'erreur. Des exceptions sont levées depuis le bloc try. en utilisant l'instruction throw, et intercepté en dehors du bloc try avec une instruction catch. "instanceOf
. Vérifiez iciname
propriété de la fonction constructeur. Je suggérais de jeter un objet sur mesure avec unename
propriété, qui ne se cassera pas ...Comme indiqué dans les commentaires ci-dessous, cela est spécifique à Mozilla, mais vous pouvez utiliser des blocs de «capture conditionnelle». par exemple:
Cela donne quelque chose de plus proche de la gestion des exceptions typées utilisée en Java, au moins syntaxiquement.
la source
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
try-catch-finally.js
En utilisant try-catch-finally.js , vous pouvez appeler la
_try
fonction avec un rappel anonyme, qu'elle appellera, et vous pouvez enchaîner les.catch
appels pour intercepter des erreurs spécifiques, et un.finally
appel pour exécuter dans les deux cas.Exemple
Exemple avec des fonctions fléchées modernes et des littéraux de modèle
la source
Module pour l'utilisation d'exportation
Importer dans le script:
Utilisation:
Indicatif d'appel externe:
la source
Je n'aimais aucune de ces solutions alors j'ai créé la mienne. Le try-catch-finally.js est plutôt cool sauf que si vous oubliez un petit trait de soulignement (_) avant l'essai, le code fonctionnera toujours très bien, mais rien ne sera jamais attrapé! Beurk.
CatchFilter
J'ai ajouté un CatchFilter dans mon code:
Maintenant je peux filtrer
Maintenant, je peux filtrer comme en C # ou Java:
la source
la source