Javascript asíncrono usando Async - Await

async/wait sintaxis más limpia para escribir código Javascript asíncrono. Mejora la legibilidad y el flujo de su código.

· 3 min de lectura
Javascript asíncrono usando Async - Await

Async/await es una forma relativamente nueva de escribir código asíncrono en Javascript. Antes usábamos callbacks y promises. Async/wait en realidad se basa en las promesas.

¿Por qué async/await? — Bueno, en pocas palabras, async/await nos permite escribir código asíncrono de forma síncrona.

Funciones Asíncronos - Async functions

Para crear una función de asíncrono todo lo que tenemos que hacer es añadir la palabra clave asíncrona async antes de la definición de la función, Por ejemplo:

async function asyncFunction() {
  return 'Hola ?';
}

— Lo único que necesitas saber sobre las funciones de asíncrono (async functions) es que siempre devuelven una promesa.

Si deseas devolver algo explicitamente que no sea una promesa, como el ejemplo mostrado anteriormente,

En el caso de que devolvamos explícitamente algo que no es una promesa, como el ejemplo anterior, el valor de retorno se envuelve automáticamente en una promesa.

/* Para el ejemplo anterior */
asyncFunction().then(result => console.log(result))

— Devolverá la cadena Hola ?

Await

La palabra clave awit solo se puede usar dentro de un bloque async, de lo contrario, generará un error de sintaxis. Esto significa que no puede usar await en el nivel superior de nuestro código, básicamente, no le uses solo.

¿Cuándo lo usamos? — Si tenemos una función asíncrona dentro de un bloque de asíncrono. Entonces, digamos que necesitamos obtener algunos datos de nuestro servidor y luego usarlos dentro de nuestro bloque asíncrono. Usaremos await para pausar la ejecución de la función y reanudarla después de que lleguen los datos.

En este ejemplo, usaremos una biblioteca auxiliar llamada Axios. Hace muchas de las mismas cosas que fetch, excepto que analiza el cuerpo de la respuesta por nosotros.
async function asyncFunction() {
  // obtener datos de una url
  const data = await axios.get('https://api.github.com/s/GodoFredoNinja');
  return data;
}

Await es simplemente una forma más elegante de escribir una promesa dentro de una función asíncrona . Mejora enormemente la legibilidad.

Supongamos que tenemos un par de funciones asíncronas dentro de nuestro async bloque. En lugar de encadenar promesas, podríamos hacer esto, que es mucho más limpio:

async function asyncFunction() {
  // obtener datos de una url
  const response = await axios.get('https://api.github.com/s/GodoFredoNinja');
  const data = await response.json();
  
  return data;
}

Manejo de errores

¿Cómo manejamos los errores? Tenemos algunas opciones, vamos a explorarlas:

Try — Catch

Esta es la manera más común de manejar los errores cuando se usa async-await. Todo lo que tiene que hacer es encapsular su código en un bloque de try y manejar cualquier error que ocurra en un catch.

async function asyncFunction() {
  try {
    // obtener datos de una url
    const data = await axios.get('https://api.github.com/s/GodoFredoNinja');

    return data;
  } catch(error) {
    console.log('error', error);
    // manejar adecuadamente el error
  }
}

Si se produce un error al obtener datos, la ejecución se transfiere al bloque de catch y podemos manejar cualquier error que se produzca. Si tenemos varias lineas de await, el bloque catch captura los errores que ocurren en todas las líneas.

async function asyncFunction() {
  try {
    // obtener datos de una url
    const response = await axios.get('https://api.github.com/s/GodoFredoNinja');
    const data = await response.json();

    return data;
  } catch(error) {
    console.log(error); // detecta errores
  }
}

Si no es ( try — catch )

De forma alternativa podemos añadir .catch() a la promesa generada por la función asíncrono async. Recapitulemos: Recuerde que la función de asíncrono async  devuelve una promesa. Si ocurre un error, entonces devuelve una promesa rechazada, por lo tanto, en la llamada a la función podríamos hacer esto:

asyncFunction().catch((error) => {
  // Manipular los errores adecuadamente
});

Método asíncrono en clases

Los métodos de clase pueden ser async.

class Example{
  async asyncMethod() {
    const data = await axios.get('https://api.github.com/s/GodoFredoNinja');
    return data
  }
}

Para llamar al método hacemos:

const exampleClass = new Example();
exampleClass.asyncMethod().then(/* Aquí tienes el resultado */)

Artículo anterior

Una lista completa de Emojis para Github, Slack, Discord, Qiita

Los emojis son ampliamente utilizados por desarrolladores, donde pueden expresarse con pequeñas imagenes de dibujos animados y ayudar a la compresión del

Artículo siguiente

? Realiza dibujos en el gráfico de contribución de GitHub

Hackea tu gráfico de contribución de GitHub y agregue un poco de estilo Pixel Art ?? creando impresionantes dibujos

Artículos Relacionados

Como obtener al padre de un elemento con vanilla JS

Como obtener al padre de un elemento con vanilla JS

· 1 min de lectura
Cómo utilizar window.confirm()

Cómo utilizar window.confirm()

· 1 min de lectura
Como elegir una clave SSH para un host especifico

Como elegir una clave SSH para un host especifico

· 1 min de lectura
Como detectar un elemento sticky cuando se queda fijo

Como detectar un elemento sticky cuando se queda fijo

· 1 min de lectura
Convertir una cadena en un array en JavaScript

Convertir una cadena en un array en JavaScript

· 2 min de lectura
Video responsive de YouTube y Vimeo con HTML y CSS

Video responsive de YouTube y Vimeo con HTML y CSS

· 1 min de lectura