如何在JavaScript中使用异步/等待?

时间:2019-11-21 08:59:46

标签: javascript async-await

我有以下代码:

function one() {

    setTimeout(() => {

        console.log('one');
    }, 2000);
}

function two() {
    console.log('two');
}

function three() {
    console.log('three');
}

function wrapper() {
    one();
    two();
    three();
}

wrapper();

这当然是控制台按照以下顺序记录它们: 二 三 一个

使用异步/等待,我想按以下顺序控制台记录它们: 一 二 三个

我不确定如何实现这一目标。

谢谢

3 个答案:

答案 0 :(得分:2)

您必须使用asyncPromises请查看文档。

下面的代码返回一个承诺呼叫。 Promise本身将超时设置为 2秒,并且在此时间之后将“一”记录到控制台。

您可以在函数调用之前等待使用await关键字完成承诺。

请注意,这些功能必须是异步的。

 return new Promise((resolve)=>{
    setTimeout(() => {
        console.log('one');
        resolve();
      }, 2000);
  })

这里有您代码的更新版本-希望对您有所帮助:

async function one() {
  return new Promise((resolve)=>{
    setTimeout(() => {
        console.log('one');
        resolve();
      }, 2000);
  })
}

async function two() {
  console.log('two');
}

async function three() {
  console.log('three');
}

async function wrapper() {
  await one();
  await two();
  await three();
}

wrapper();

答案 1 :(得分:1)

async function one(){ 
  await new Promise(resolve => 
  setTimeout(async () => {
     await resolve(console.log('one'));
    }, 2000));
 
}

function two() {
    console.log('two');
}

function three() {
    console.log('three');
}
async function wrapper(){ await one(); two(); three();}

wrapper();

答案 2 :(得分:-3)

function who() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('?');
    }, 200);
  });
}

function what() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('lurks');
    }, 300);
  });
}

function where() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('in the shadows');
    }, 500);
  });
}

async function msg() {
  const a = await who();
  const b = await what();
  const c = await where();

  console.log(`${ a } ${ b } ${ c }`);
}

msg(); // ? lurks in the shadows <-- after 1 second