async函数是个微任务

今天遇到问代码输出结果的题

console.log(1);

async function asyFunction () {
    console.log(2);
    await console.log(3);
    await console.log(4);
    console.log(5);
    return 6
}

new Promise((resolve, reject) => {
    console.log(10);
    resolve();
}).then(res => {
    console.log(11);
})

console.log(7);


setTimeout(() => {
    console.log(8)
}, 0)

setTimeout(() => {
    console.log(9)
}, 1000)

asyFunction().then(res => { console.log(res) });

我知道async是个微任务,但是我刚开始以为async函数里面的同步代码console.log(2)console.log(5)会和promise里的同步代码一样在同步代码执行阶段的时候执行。所以我认为结果应该是1,10,2,5,7,11,3,4,6,8,9。但当我把函数跑起来后,却发现结果并不是我以为得那样

async

可以看到,在promise里得同步代码console.log(10)是在同步队列里执行的,但async函数里面的“同步代码”却是在微任务队列里执行的。

推荐阅读更多精彩内容