150 votes

Traitement des erreurs spécifiques en JavaScript (pensez aux exceptions)

Comment implémenteriez-vous différents types d'erreurs, de sorte que vous puissiez en détecter certaines et laisser les autres faire des bulles ..?

Une façon d'y parvenir est de modifier le prototype de l'objet Error :

 Error.prototype.sender = "";


function throwSpecificError()
{
    var e = new Error();

    e.sender = "specific";

    throw e;
}
 

Erreur spécifique de capture:

 try
{
    throwSpecificError();
}

catch (e)
{
    if (e.sender !== "specific") throw e;

    // handle specific error
}
 


Avez-vous les gars des alternatives?

213voto

CMS Points 315406

Pour créer des exceptions personnalisées, vous pouvez hériter de l'objet Error:

 function SpecificError () {

}

SpecificError.prototype = new Error();

// ...
try {
  throw new SpecificError;
} catch (e) {
  if (e instanceof SpecificError) {
   // specific error
  } else {
    throw e; // let others bubble up
  }
}
 

Une approche minimaliste, sans hériter de Error, pourrait être de lancer un objet simple ayant un nom et des propriétés de message:

 function throwSpecificError() {
  throw {
    name: 'SpecificError',
    message: 'SpecificError occurred!'
  };
}


// ...
try {
  throwSpecificError();
} catch (e) {
  if (e.name == 'SpecificError') {
   // specific error
  } else {
    throw e; // let others bubble up
  }
}
 

20voto

Andy Points 4242

Vous pouvez utiliser des blocs de «capture conditionnelle». par exemple:

 try {
  ...
  throwSpecificError();
  ...
}
catch (e if e.sender === "specific") {
  specificHandler(e);
}
catch (e if e.sender === "unspecific") {
  unspecificHandler(e);
}
catch (e) {
  // don't know what to do
  throw e;
}
 

Cela donne quelque chose de plus proche de la gestion des exceptions typées utilisées en Java, du moins syntaxiquement.

12voto

c24w Points 1254

try-catch-finally.js

https://github.com/c24w/try-catch-finally.js


Exemple

 _try(function () {
    throw 'My error';
})
.catch(Error, function (e) {
    console.log('Caught Error: ' + e);
})
.catch(String, function (e) {
    console.log('Caught String: ' + e);
})
.catch(function (e) {
    console.log('Caught other: ' + e);
})
.finally(function () {
    console.log('Error was caught explicitly');
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X