Prefacio
En Node.js, cuando se produce un error en una función de devolución de llamada, todo el proceso se bloqueará, afectando la ejecución del código posterior.
Node.js se maneja de esta manera porque cuando ocurre un error no abierto, el estado del proceso es incierto. No funcionará correctamente después de eso. Si el error nunca se procesa, se lanzarán errores inesperados, lo que no es propicio para la depuración.
Hay dos formas principales de evitar el bloqueo de procesos causados por errores:
1. Captura de try
try-catch permite la captura de excepciones y permite que el código continúe la ejecución:
Por ejemplo:
Cuando la función arroja un error, el código deja de ejecutar:
(function () {var a = 0; a (); console.log ("obtener aquí"); // no ejecutado}) (); Después de usar try-catch para el procesamiento de errores, el código aún se puede ejecutar:
(function () {var a = 0; try {a ();} catch (e) {console.log (e);} console.log ("Get aquí."); // get aquí.}) ();Try-Catch no puede atrapar errores de función de ejecución futuros
Es imposible capturar errores lanzados por funciones que solo se ejecutan en el futuro. Esto lanzará una excepción no captura directamente, y catch nunca se ejecutará:
Pruebe {setTimeOut (function () {tire nuevo error ("aquí");}, 10);} catch (e) {console.log (e);}Es por eso que en Node.js, los brotes de frijoles se manejan correctamente en cada paso.
Agregar manejador UncatchException
Si se agrega un procesador uncatchException , el proceso no saldrá cuando la función arroje un error.
process.on ("UncatchException", function (e) {console.log (e); process.exit (1);});Resumir
Lo anterior son todas las formas de evitar el bloqueo de procesos por errores en Node.js. Espero que sea útil para todos los que usen Node.js.