Async/await en JavaScript
En este artículo, explicaremos async/await en JavaScript.
YouTube Video
Async/await en JavaScript
async
(y await
) en JavaScript son características diseñadas para hacer que escribir operaciones asíncronas sea más intuitivo y legible. Al usar esto, puedes reducir la complejidad de las funciones de devolución de llamada tradicionales y las cadenas de Promise
, y escribir código asíncrono de una forma que parece código síncrono.
Función async
async
se utiliza para definir una función como una función asíncrona. Una función async
siempre devuelve una Promesa. Dentro de una función marcada con async
, puedes usar await
para esperar el resultado de una Promesa.
Sintaxis Básica de una Función async
1async function myAsyncFunction() {
2 // Write asynchronous processing here
3 return 'Result'; // Return a Promise
4}
En este caso, llamar a myAsyncFunction()
devuelve automáticamente un objeto de Promesa. Cuando se resuelve la Promesa, su resultado se convierte en el valor devuelto por return
.
Ejemplo: Función async
Básica
1async function greet() {
2 return 'Hello, World!';
3}
4
5greet().then((message) => {
6 console.log(message); // Displays "Hello, World!"
7});
await
await
se utiliza para esperar a que una Promesa sea resuelta. Al usar await
, puedes pausar la ejecución hasta que la Promesa sea resuelta y recibir su resultado. await
solo se puede utilizar dentro de una función async
.
Ejemplo: Cómo Usar await
1async function fetchData() {
2 // Wait for the result of the Promise
3 const data = await fetch('https://codesparklab.com/json/example.json');
4 // Wait for the asynchronous operation to complete
5 const jsonData = await data.json();
6 // Retrieve and display the data
7 console.log(jsonData);
8}
9
10fetchData();
En el ejemplo anterior, espera la Promesa devuelta por la función fetch
con await
, y luego realiza más operaciones asíncronas utilizando el resultado.
Manejo de Errores con async
/await
Si ocurre un error dentro de una función async
, ese error se trata como un reject
de la Promesa. Puedes usar sentencias try...catch
para gestionar errores.
Ejemplo: Manejo de Errores
1async function fetchData() {
2 try {
3 // Invalid URL
4 const data = await fetch('https://api.invalid-url.com/data');
5 const jsonData = await data.json();
6 console.log(jsonData);
7 } catch (error) {
8 // Catch the error
9 console.error('Failed to fetch data:', error);
10 }
11}
12
13fetchData();
Usar un bloque try...catch
te permite capturar errores que ocurren durante operaciones asíncronas, evitando que el programa se bloquee si ocurren errores.
Beneficios de async
/await
En comparación con las cadenas de Promise
tradicionales, async
/await
ofrece las siguientes ventajas:.
- Mayor legibilidad
- El procesamiento asíncrono puede escribirse como código síncrono, evitando la complejidad de las cadenas de
Promise
y los callbacks profundamente anidados.
- El procesamiento asíncrono puede escribirse como código síncrono, evitando la complejidad de las cadenas de
- Depuración más sencilla
- Como se parece al código síncrono, la depuración y el manejo de errores se vuelven más fáciles.
- Mejor mantenibilidad
- Los procesos asíncronos pueden escribirse de manera más simple, lo que facilita el cambio o modificación del código y mejora la mantenibilidad a largo plazo.
Ejemplo: cadena de Promise
vs async
/await
Comparemos el código usando cadenas de Promise
y el código usando async
/await
.
1// Code using Promise chains
2function fetchDataPromise() {
3 fetch('https://codesparklab.com/json/example.json')
4 .then((response) => response.json())
5 .then((data) => {
6 console.log(data);
7 })
8 .catch((error) => {
9 console.error('Failed to fetch data:', error);
10 });
11}
12
13// Code using async/await
14async function fetchDataAsync() {
15 try {
16 const response = await fetch('https://codesparklab.com/json/example.json');
17 const data = await response.json();
18 console.log(data);
19 } catch (error) {
20 console.error('Failed to fetch data:', error);
21 }
22}
Como puedes ver, usar async
/await
te permite escribir procesos asíncronos de manera lineal, lo que da como resultado un código más legible.
Ejecutar múltiples operaciones asincrónicas simultáneamente
Combinando Promise.all()
o Promise.race()
con await
, puedes ejecutar varias operaciones asíncronas simultáneamente y manejar sus resultados de manera conjunta.
Ejemplo: Ejecutar múltiples operaciones asincrónicas de manera concurrente
1async function fetchMultipleData() {
2 try {
3 const [data1, data2] = await Promise.all([
4 fetch('https://codesparklab.com/json/example1.json'),
5 fetch('https://codesparklab.com/json/example2.json')
6 ]);
7 const jsonData1 = await data1.json();
8 const jsonData2 = await data2.json();
9 console.log(jsonData1, jsonData2);
10 } catch (error) {
11 console.error('Failed to fetch data:', error);
12 }
13}
14
15fetchMultipleData();
Promise.all()
resuelve múltiples Promesas simultáneamente y devuelve sus resultados en forma de un arreglo. Espera a que todas las Promesas se resuelvan, y si alguna de ellas falla, se considera un fallo general.
Resumen
- Función
async
: Siempre devuelve una Promesa y se utiliza para escribir procesamiento asíncrono. await
: Se utiliza para esperar a que una Promesa se resuelva y recibir su resultado.- Manejo de errores: Usa
try...catch
para manejar errores que ocurren durante el procesamiento asíncrono. - Múltiples operaciones asíncronas: Puedes ejecutar múltiples operaciones asíncronas simultáneamente utilizando
Promise.all()
.
async
/await
son herramientas poderosas para manejar el procesamiento asíncrono, así que asegúrate de utilizarlas para simplificar la lógica asíncrona compleja.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.