我的理解是,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
}
}