Saltar al contenido

Entendiendo async / await en NodeJS

Solución:

Para despejar algunas dudas –

  1. Puedes usar await con cualquier función que devuelva una promesa. La función que está esperando no necesita ser async necesariamente.
  2. Deberías usar async funciones cuando desee utilizar el await palabra clave dentro de esa función. Si no vas a usar el await palabra clave dentro de una función, entonces no necesita hacer esa función async.
  3. async las funciones por defecto devuelven una promesa. Esa es la razón por la que puedes await async funciones.

Desde MDN –

Cuando se llama a una función asíncrona, devuelve una Promesa.

En lo que respecta a su código, podría escribirse así:

const getUsers = (ms) => { // No need to make this async
    return new Promise(resolve => setTimeout(resolve, ms));
};

// this function is async as we need to use await inside it
export const index = async (req, res) => {
    await getUsers(5000);

    res.json([
      {
        id: 1,
        name: 'John Doe',
      },
      { id: 2,
        name: 'Jane Doe',
      },
    ]);
};

Usted puede await cualquier promesa en un async función. El código después del await se ejecutará después de que finalice la promesa que está esperando.

Esta es una gran alternativa a las devoluciones de llamada clásicas de JavaScript.

Escribí un blog al respecto -> https://github.com/Gameye/js-async ¡Espero que esto te ayude!

Funciones asincrónicas en Javascript

los async palabra clave convierte una declaración de función JS normal en una declaración de función asincrónica:

function syncFunc {// dostuff}
async function asyncFunc {// dostuff} // the async keyword is placed before the function keyword

Una función asincrónica devuelve una promesa:

  • Cuando la función asíncrona devuelve un valor, la Promesa se resolverá con el valor devuelto.
  • Cuando la función asíncrona arroja una excepción o algún valor, la Promesa se rechazará con el valor arrojado.

Dentro de una función asíncrona, puede usar la await palabra clave. await colocado antes de una promesa hace que la función asincrónica se detenga hasta que la promesa se establezca (ya sea rechazada o cumplida)

  • . Cuando la promesa se cumpla El valor de la await expresión es el valor de la promesa cumplida.
  • Cuando la promesa es rechazada, await expresión lanza el valor rechazado.

Ejemplo:

function makePromise(x) { 
    return new Promise(resolve => {
      setTimeout(() => {
        resolve(x);
      }, 1000);
    });
  }
  
  async function asyncFunc() {
    var x = await makePromise(1); // the function is paused here until the promise is fulfilled
    console.log(x); // logs 1
    return x;
  }
  
  const returnedProm = asyncFunc(); // the async func returns a promise


  returnedProm.then((x) => console.log(x));
  // This promise is fulfilled with the return value from the async func, so this logs 1

Cuándo usar funciones asincrónicas:

Las funciones asincrónicas son una herramienta útil cuando tiene múltiples acciones asincrónicas (implementadas como promesas) que dependen unas de otras. Por ejemplo, cuando su segunda promesa necesita datos que le proporcionará su primera promesa. Ahora puede utilizar cómodamente el await palabra clave para recibir primero los datos en la promesa 1 y luego pasar estos datos como un argumento para la promesa 2.

En otras palabras, la función asincrónica puede a través del await La palabra clave hace que la programación asincrónica se comporte como la programación sincrónica. Como consecuencia, sus aplicaciones son más fáciles de entender.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *