等待非承诺时的执行顺序是什么?



我的理解是,await 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时,幕后发生了什么?等待非承诺时的执行顺序是什么?特别是await console.log?

在你的例子中

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

顺序很明显

In case

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

同步的也将是第一个,因为await暂停函数执行

如果你想要你的"同步"等待是同步的如果它不是一个promise你就不能等待

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

相关内容

  • 没有找到相关文章

最新更新