¿Cómo implementaría diferentes tipos de errores para poder detectar algunos específicos y dejar que otros aparezcan?
Una forma de lograrlo es modificar el prototipo del Error
objeto:
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
Detectar error específico:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
¿Tienen alguna alternativa, chicos?
javascript
error-handling
cllpse
fuente
fuente
Error
tiene problemas. Ver stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
es que no funcionará en IE7, lo que genera el error "Excepción lanzada y no detectada". A continuación se muestra la explicación extremadamente estúpida (como siempre) de msdn: "Incluyó una declaración de lanzamiento, pero no estaba incluida en un bloque de prueba, o no había un bloque de captura asociado para atrapar el error. Las excepciones se lanzan desde dentro del bloque de prueba usando la sentencia throw y capturado fuera del bloque try con una sentencia catch ".instanceOf
. Compruebe aquíname
propiedad de la función constructora. Estaba sugiriendo lanzar un objeto hecho a medida con unaname
propiedad, que no se romperá ...Como se indica en los comentarios a continuación, esto es específico de Mozilla, pero puede usar bloques de 'captura condicional'. p.ej:
Esto le da algo más parecido al manejo de excepciones escritas usado en Java, al menos sintácticamente.
fuente
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
Utilizando try-catch-billion finalmente.js , puede llamar a la
_try
función con una devolución de llamada anónima, a la que llamará, y puede encadenar.catch
llamadas para detectar errores específicos y una.finally
llamada para ejecutar de cualquier manera.Ejemplo
Ejemplo con funciones de flecha modernas y literales de plantilla
fuente
Módulo para uso de exportación
Importar al script:
Utilizar:
Código de llamada externo:
fuente
No me gustó ninguna de estas soluciones, así que hice la mía. El try-catch-finalmente.js es bastante bueno, excepto que si olvidas un pequeño guión bajo (_) antes del intento, el código seguirá funcionando bien, ¡pero nunca se detectará nada! ¡Qué asco!
CatchFilter
Agregué un CatchFilter en mi código:
Ahora puedo filtrar
Ahora puedo filtrar como en C # o Java:
fuente
fuente