El equipo de Node.js ha anunciado el lanzamiento de una nueva versión principal: ¡NodeJS 15!
Si bien una nueva versión siempre es emocionante, algunas personas se preguntan qué significa para ellos:
¿Cómo me afectan los cambios y qué debo hacer antes de actualizar?
¿Cuáles son las nuevas funciones y sus casos prácticos de uso?
Aparte de un cambio único, pero importante, revolucionario, nodejs 15 trata principalmente de nuevas funciones. Por lo tanto, la actualización desde versiones anteriores de Node debería ser bastante sencilla. hay que tomar en cuenta que el nodejs 15 no entrará en LTS; más sobre eso a continuación.
Mejor manejo de excepciones
Antes de nodejs 15, se obtendría un error cuando una promesa se rechazara sin quedar atrapada en ninguna parte de la cadena de promesas.
Probablemente esté familiarizado con el mensaje. Esta advertencia ha existido desde Node 6.6, lanzado hace más de cuatro años. El equipo detrás de Node finalmente decidió que era hora de actuar sobre la advertencia de Promise.reject.
A partir de la versión 15 en adelante, Node generará una excepción no detectada y finalizará la aplicación. Esto puede ser una sorpresa desagradable en producción si decide actualizar Node sin ser consciente de este cambio.
Esto podría parecer como una jugada valiente de parte del equipo que lo desarrolla. Ya que, potencialmente, podría romper muchísimas aplicaciones con backend node que estan hechas con practicas no tan buenas alrededor de el manejo de promesas y sus flujos de control.
… pero tranquilos …
Al agregar un controlador global del evento unhandledRejection, puede detectar los rechazos no controlados y decidir cómo desea continuar. El siguiente código simplemente registrará el evento y mantendrá la aplicación en ejecución, similar al comportamiento de las versiones anteriores de Node:
process.on('unhandledRejection', (reason, promise) => {
console.log('Unhandled Rejection at:', promise, 'reason:', reason);
// Puede decidir entre:
// 1\. Holgazanear y no hacer nada realmente ?????
// 2\. salir con `process.exit(1)` y dejar que el gestor de procesos reinicie la aplicacion automaticamente
});
Yo opino que este workaround debe ser solo temporal en sus aplicaciones, obviamente que un refactor que arregla años de excepciones fantasma no va a salir en 30 minutos o gratis. Pero si vale la pena hacer el esfuerzo de hacerlo gradualmente. El mundo corre sobre suficiente mal software y nuestra responsabilidad es hacerlo cada vez mejor.