javascript 等待非Promise时的执行顺序是什么?

eivgtgni  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(141)

此问题在此处已有答案

Does awaiting a non-Promise have any detectable effect?(3个答案)
昨天关门了。
我的理解是,await promise表达式中的promise会被推送到微任务队列,所以它会在调用堆栈为空后解决。下面的代码按照我的预期工作:

async function func() {
  console.log(await Promise.resolve('bagel'));
}

func();
console.log('synchronous log');

// Result:
// synchronous log
// bagel

但是如果我await不是像这样的Promise,日志的顺序会改变:

async function func() {
  await console.log('bagel');
}

func();
console.log('synchronous log');

// Result:
// bagel
// synchronous log

当我调用await时,在幕后发生了什么?当等待一个非Promise时,执行的顺序是什么?特别是await console.log

rekjcdws

rekjcdws1#

在你的情况下

async function func() {
  let un = console.log('bagel');
  await un;
}

func();
console.log('synchronous log');

所以顺序很明显
万一

async function func() {
  await 0;
  console.log('bagel');
}

func();
console.log('synchronous log');

同步的也是第一个,因为await暂停函数执行
如果你希望你的“同步”等待是同步的,你必须不等待它,如果它不是一个承诺

async function func(wait) {
  if (wait?.then) {
    await wait
  }
}

相关问题