首页 > 解决方案 > 为什么在 b 打印之前打印 2 和 4?

问题描述

function first() {
  return new Promise(resolve => {
    console.log(2);
    resolve(3);
    console.log(4);
  });
}

async function f() {
  console.log(1);
  let r = await first();
  console.log(r);
  console.log(99);
}

console.log('a');
f();
console.log('b');

在上面的代码中显示了以下结果:

a
1
2
4
b
3
99

据我了解,当编译器命中await first()函数时,它会将first()函数执行推送到事件队列并暂停执行f(),继续执行之后的所有内容f()。所以执行顺序应该是:

a
1
b
2
4
3
99

显然,我弄错了。谁能向我解释这是如何真正起作用的?

标签: javascriptnode.jsconcurrencyasync-awaitv8

解决方案


在此处输入图像描述

在此处输入图像描述

如果您不明白,请发表评论。谢谢你。


推荐阅读