为什么不在最低级别等待时主线程被保留?

Why is the main thread being held when not awaiting at lowest level?

我是异步新手 javascript,需要一些说明。 所以我有以下代码:

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

async function main() {
  while (true) {
    await delay(2000);
  }
}

main()
console.log(`Hi!`);

这按预期工作,主线程没有被 promise 占用,因此“嗨!”被记录。但是,在注释掉第 7 行 (await delay(2000);) 时,“嗨!”根本没有记录。为什么会这样?

解决方案 1

您可以在登录前使用 .then() 等待承诺。

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

async function main() {
   await delay(2000);
}

main().then(x => console.log(`Hi! I'm delayed by 2 seconds!`));

解决方案 2

main() 函数中记录。

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

async function main() {
   await delay(2000);
   console.log(`Hi! I'm delayed by 2 seconds!`);
}

main();

但无论哪种方式,您都必须删除 while 循环。