El async/await
1. 1. async y await en JavaScript con la PokeAPI #
En JavaScript, async y await son dos palabras clave que facilitan el trabajo con operaciones asíncronas, como las solicitudes a una API, de una manera que hace que el código sea más legible y fácil de entender. Estas palabras clave permiten escribir código asíncrono que se lee como si fuera código síncrono.
¿Qué son async y await? #
async: Es una palabra clave que se coloca antes de una función para declarar que esa función es asíncrona. Una función marcada comoasyncdevuelve automáticamente una promesa.await: Se utiliza dentro de una funciónasyncpara pausar la ejecución de la función hasta que una promesa se resuelva. El código se detiene en la líneaawaithasta que la promesa se resuelve, luego continúa con el valor resuelto.
Ejemplo de uso de async y await con la PokeAPI #
Supongamos que queremos obtener información sobre un Pokémon, como Pikachu, de la PokeAPI. Usaremos async y await para manejar la solicitud de una manera más sencilla y clara.
1// Declaramos una función asíncrona usando async 2async function obtenerPokemon(nombre) { 3 try { 4 // Usamos await para esperar a que la promesa de fetch se resuelva 5 let respuesta = await fetch(`https://pokeapi.co/api/v2/pokemon/${nombre}`); 6 7 // Convertimos la respuesta a JSON (también espera a que la promesa se resuelva) 8 let pokemon = await respuesta.json(); 9 10 // Trabajamos con los datos del Pokémon 11 console.log("Nombre:", pokemon.name); 12 console.log("Altura:", pokemon.height); 13 console.log("Peso:", pokemon.weight); 14 } catch (error) { 15 // Manejamos cualquier error que ocurra durante la solicitud 16 console.error("Error al obtener los datos:", error); 17 } 18} 19 20// Llamamos a la función para obtener los datos de Pikachu 21obtenerPokemon("pikachu");
En este ejemplo:
async function obtenerPokemon(nombre): Esta función se declara como asíncrona usandoasync, lo que significa que puede usarawaitdentro de su cuerpo.await fetch(...): Se usaawaitpara esperar a que la promesa devuelta porfetch(la solicitud HTTP) se resuelva. Esto significa que el código no continuará hasta que se reciba la respuesta.await respuesta.json(): Después de obtener la respuesta, se convierte a JSON usandoawait, lo que garantiza que el código espere a que los datos se procesen antes de continuar.try...catch: Se utiliza para manejar cualquier error que pueda ocurrir durante la solicitud, como problemas de red.
Resultado:
Cuando llamas a obtenerPokemon("pikachu"), verás algo como esto en la consola si la solicitud es exitosa:
Nombre: pikachu
Altura: 4
Peso: 60
2. Ventajas de async y await #
- Código más legible: El uso de
asyncyawaithace que el código asíncrono se parezca mucho más al código síncrono, lo que facilita su lectura y mantenimiento. - Manejo de errores simplificado: Puedes manejar errores en el código asíncrono usando
try...catch, lo que es más claro que manejar errores con promesas ycatch. - Ejecución secuencial: Puedes escribir código que espera a que una promesa se resuelva antes de continuar, lo que ayuda a garantizar que las operaciones ocurran en el orden correcto.
Resumen del tema
Conceptos clave #
- Sintaxis
async/await(ES2017): azúcar sintáctico sobre Promesas que permite escribir código asíncrono no bloqueante con estructura y lectura secuencial síncrona. - Función
async: devuelve incondicionalmente unaPromise(envolviendo el retorno enPromise.resolve()). - Operador
await: pausa la ejecución dentro de la funciónasynchasta que la promesa se resuelve o rechaza, liberando el hilo principal. - Gestión de Errores con
try...catch: captura rechazos de promesas de forma idéntica a las excepciones síncronas convencionales.
Qué debes recordar #
Usa async/await junto con bloques try...catch como el estándar moderno para consumir promesas con máxima claridad y legibilidad.