Saltar al contenido principal

Causas de errores

· 2 min de lectura
Victor Gomes ([@VictorBFG](https://twitter.com/VictorBFG))

Imagina que tienes una función que llama a dos cargas de trabajo separadas doSomeWork y doMoreWork. Ambas funciones pueden lanzar el mismo tipo de errores, pero necesitas manejarlos de diferentes maneras.

Atrapar el error y lanzarlo con información adicional contextual es un enfoque común para este problema, por ejemplo:

function doWork() {
try {
doSomeWork();
} catch (err) {
throw new CustomError('Fallo en el trabajo', err);
}
doMoreWork();
}

try {
doWork();
} catch (err) {
// ¿Proviene |err| de |doSomeWork| o de |doMoreWork|?
}

Desafortunadamente, la solución anterior es laboriosa, ya que uno necesita crear su propio CustomError. Y, aún peor, ninguna herramienta de desarrollo es capaz de proporcionar mensajes de diagnóstico útiles para excepciones inesperadas, ya que no hay consenso sobre cómo representar correctamente estos errores.

Lo que ha faltado hasta ahora es una forma estándar de encadenar errores. JavaScript ahora admite causas de errores. Se puede agregar un parámetro adicional de opciones al constructor Error con una propiedad cause, cuyo valor se asignará a las instancias de error. Los errores se pueden encadenar fácilmente después de esto.

function doWork() {
try {
doSomeWork();
} catch (err) {
throw new Error('Fallo en el trabajo', { cause: err });
}
try {
doMoreWork();
} catch (err) {
throw new Error('Fallo en más trabajo', { cause: err });
}
}

try {
doWork();
} catch (err) {
switch(err.message) {
case 'Fallo en el trabajo':
handleSomeWorkFailure(err.cause);
break;
case 'Fallo en más trabajo':
handleMoreWorkFailure(err.cause);
break;
}
}

Esta función está disponible en V8 v9.3.

Soporte para causas de errores