闲着没事儿出一道异步的题给大伙儿打发时间
先看题目:
javascript<script> 2 console.log("1"); // 同步任务 4 setTimeout(() => { 5 console.log("2"); 6 }, 0); 7 8 Promise.resolve().then(() => { 9 console.log("3"); 10 }); 11 12 (async () => { 13 console.log("4"); 14 15 await new Promise((resolve) => { 16 console.log("5"); 17 resolve(); 18 }); 19 20 console.log("6"); 21 })(); 22 23 console.log("7"); 24 26</script>
解题思路:同步任务=>微任务=>下一个宏任务
再看解析:
javascript
<script>
//同步任务
console.log("1");
//宏任务
setTimeout(() => {
console.log("2");
}, 0);
//微任务
Promise.resolve().then(() => {
console.log("3");
});
//定义一个异步函数
(async () => {
//同步任务
console.log("4");
//await new Promise会立即执行,但是会等待Promise的状态变为resolved后再执行后面的代码
//这里依旧是同步代码的一部分
await new Promise((resolve) => {
//同步任务
console.log("5");
//romise通过resolve()变为fulfilled,await表达式就会完成,后续的任务会在微任务队列中执行
resolve();
});
//微任务
console.log("6");
})();
//同步任务
console.log("7");
//打印顺序:1 4 5 7 3 6 2
</script>