Async await y captura de errores
Clase 16 de 27 • Curso de Backend con Node.js: API REST con Express.js
Resumen
¿Cómo manejar asincronismo en servicios con Node.js?
Trabajar con servicios en Node.js implica, casi siempre, tratar con asincronismo, especialmente cuando nos conectamos a fuentes de datos externas como API de terceros, bases de datos como MongoDB o PostgreSQL, entre otros. Esto crea un "delay" debido a las conexiones. Aprender a manejar este asincronismo es crucial para evitar bloqueos en nuestras aplicaciones.
¿Qué rol juegan async y await?
Node.js se destaca por su capacidad de ejecutar operaciones de manera asíncrona, y la combinación de async
y await
simplifica mucho este proceso. Cualquier método que tenga la firma async
se considera una promesa, lo que significa que se ejecuta de manera asíncrona.
Para comenzar a trabajar con asincronismo:
-
Definir métodos como asíncronos: Añade la palabra clave
async
antes de la declaración de funciones o métodos, aunque actualmente no implementenawait
. Esto las prepara para futuras conexiones con servicios externos asíncronos.async function nombreDelMetodo() { // lógica }
-
Uso de await: Utiliza
await
cuando llamas a una función que devuelve una promesa. Esto pausará la ejecución de la función hasta que la promesa se resuelva.async function obtenerDatos() { const resultado = await fetchDatosExterno(); // Continua con el procesamiento }
¿Cómo se emula la asincronía?
Aunque trabajamos en memoria y todo parece ocurrir de forma instantánea, podemos emular un comportamiento asíncrono para prepararnos. Por ejemplo, mediante la simulación de un retraso con setTimeout
y las promesas:
async function obtenerProductos() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(this.products);
}, 5000); // Simula una latencia de 5 segundos
});
}
¿Cómo podemos manejar errores asíncronamente?
El uso de try...catch
en funciones que usan async
y await
permite manejar errores de manera elegante. Cuando un error es lanzado dentro de un bloque try
, el control pasa a la sección catch
.
Por ejemplo, para un método que actualiza datos:
async function actualizarProducto(idProducto) {
try {
const producto = await buscarProducto(idProducto);
// Lógica para actualización
} catch (error) {
return response.status(404).json({ message: 'Producto no encontrado', error });
}
}
Ventajas del manejo asíncrono
- Mejora de rendimiento: Permite que otros procesos de la aplicación continúen ejecutándose mientras se espera la respuesta de un servicio externo.
- Escalabilidad: Las aplicaciones asíncronas manejan mejor las cargas grandes y simultáneas de usuarios.
- Elegancia en el manejo de errores: Facilita el uso de
try...catch
para controlar flujos de error sin interrumpir la ejecución del código.
El uso de async
y await
ayuda a gestionar las operaciones asíncronas de manera eficiente, permitiendo crear aplicaciones de Node.js más rápidas, escalables y manejables. ¡Imprescindible para cualquier desarrollador en el ecosistema de Node.js! Sigue explorando y aplicando estos conceptos en tus proyectos.