Sé que setTimeout es una API que se ejecuta de forma asincrónica y quería ejecutarla de forma sincrónica. El uso de async/await como se muestra a continuación debería imprimir bla bla primero, pero obtengo bla primero.

  async function testing(){
    console.log("testing function has been triggered");
      await setTimeout(function () {
        console.log("bla bla")
      }, 4200)
    console.log("bla");
  }
1
Muhammad Naufil 16 ago. 2020 a las 19:23

2 respuestas

La mejor respuesta

setTimeout no devuelve un Promise, por lo que no puede await.

Puede envolver setTimeout en una función que devuelve un Promise que se cumple una vez que expira el temporizador. Puede await esta función de envoltura.

function createCustomTimeout(seconds) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('bla bla');
      resolve();
    }, seconds * 1000);
  });
}

async function testing() {
  console.log('testing function has been triggered');
  await createCustomTimeout(4);
  console.log('bla');
}

testing();
1
Yousaf 16 ago. 2020 a las 16:31
async function testing(){
  console.log("testing function has been triggered");
   console.log(await printFunction());
  console.log("bla");
}

function timeout(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

const printFunction = async () => {
  await timeout(4200);
  return "bla bla"
}

testing();

Por favor apoye con la respuesta si resolvió su problema, gracias.

1
Rahul Beniwal 16 ago. 2020 a las 16:34