首页 > 解决方案 > 在第二个 await -Async/await 之前等待第一个 await 完成

问题描述

我正在尝试使第二个功能等到第一个功能完成。在下面的示例中,我无法实现它。在探索 async/await 时,据说执行顺序是连续的。但是,这里的情况似乎并非如此。

function one() {
  setTimeout(() => {
    console.log('Hi')
  }, 5000)
}

function two() {
  setTimeout(() => {
    console.log('Bye')
  }, 2000)
}

async function doAll() {
  await one();
  await two();
}
async function demo() {
  await doAll();
}

demo()

输出

Bye
Hi

在此示例中,由于函数二涉及的时间较少,'Bye'因此在'Hi'. 但我试图确保当第一个函数完成执行时,它应该转到第二个。

标签: javascriptasync-await

解决方案


那是因为您定义的函数在某种意义上不能被await编辑,因为它们不返回可以解决的承诺。相反,它们立即完成/立即“解决”。

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

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

async function doAll() {
  await one();
  await two();
}
async function demo() {
  await doAll();
}

demo()


推荐阅读