Lidar com erros específicos no JavaScript (pensar excepções)
Como você implementaria diferentes tipos de erros, para que você fosse capaz de pegar alguns específicos e deixar outros borbulharem..?
Uma maneira de conseguir isso é modificar o protótipo do objeto
Uma maneira de conseguir isso é modificar o protótipo do objeto
Error
:
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
erro específico da captura:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
Vocês têm alguma alternativa?
70
3 answers
Para criar excepções personalizadas, poderá herdar do objecto de Erro:
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
}
}
Uma abordagem minimalista, sem herdar do erro, pode ser atirar um objecto simples com um nome e propriedades de mensagem:
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
}
}
95
Author: CMS, 2012-01-08 20:13:01
Como indicado nos comentários abaixo, este é específico do Mozilla, mas você pode usar blocos de 'captura condicional'. por exemplo:
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;
}
Isto dá algo mais parecido com o tratamento tipado de excepções usado em Java, pelo menos sintaticamente.
14
Author: Andy, 2015-11-03 10:02:22
try-catch-finally.js
Exemplo
_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');
});
7
Author: c24w, 2016-08-28 23:01:40