Como você implementaria diferentes tipos de erros, para ser capaz de detectar alguns específicos e permitir que outros surgissem ...?
Uma maneira de conseguir isso é modificar o protótipo do Error
objeto:
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
Capture o erro específico:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
Vocês têm alguma alternativa?
javascript
error-handling
cllpse
fonte
fonte
Error
tem problemas. Consulte stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
é que ele não funcionará no IE7, gerando o erro "Exceção lançada e não detectada". A seguir está a explicação extremamente estúpida (como sempre) do msdn: "Você incluiu uma instrução throw, mas ela não estava incluída em um bloco try, ou não havia bloco catch associado para detectar o erro. Exceções são lançadas de dentro do bloco try usando a instrução throw e capturado fora do bloco try com uma instrução catch. "instanceOf
. Verifique aquiname
propriedade da função construtora. Eu estava sugerindo jogar um objeto feito sob encomenda com umaname
propriedade, que não vai quebrar ...Conforme observado nos comentários abaixo, isso é específico do Mozilla, mas você pode usar blocos de 'captura condicional'. por exemplo:
Isso dá algo mais parecido com o tratamento de exceções digitadas usado em Java, pelo menos sintaticamente.
fonte
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
Usando try-catch-finally.js , você pode chamar a
_try
função com um retorno de chamada anônimo, que será chamado, e pode encadear.catch
chamadas para detectar erros específicos e uma.finally
chamada para executar de qualquer maneira.Exemplo
Exemplo com funções de seta modernas e literais de modelo
fonte
Módulo para uso de exportação
Importar para o script:
Usar:
Código de chamada externo:
fonte
Não adorei nenhuma dessas soluções, então criei a minha. O try-catch-finally.js é muito legal, exceto que se você esquecer um pequeno sublinhado (_) antes de tentar, o código ainda funcionará perfeitamente, mas nada será detectado nunca! Que nojo.
CatchFilter
Eu adicionei um CatchFilter em meu código:
Agora posso filtrar
Agora posso filtrar como em C # ou Java:
fonte
fonte