一個小例子瞧破js微任務

setTimeout(()=>{
    console.log('timeout');
});

Promise.resolve().then(
    ()=>{
        console.log(1);
    }
).then(
    ()=>{
        console.log(2);
    }
).then(
    ()=>{
        console.log(3);
    }
);

Promise.resolve().then(
    ()=>{
        console.log('a');
    }
).then(
    ()=>{
        console.log('b');
    }
).then(
    ()=>{
        console.log('c');
    }
);

這個例子的輸出為“1”,“a”,“2”,“b”,“3”,“c”,“timeout”。
因為任務的執(zhí)行順序是宏任務,微任務交替執(zhí)行的,所以作為下一次宏任務的“timeout”最后執(zhí)行。
微任務與宏任務的運行機制不同,運行微任務時碰到的微任務會直接加到本次微任務隊列的尾部,直到該隊列沒有可執(zhí)行的微任務。

微任務的隊列大致變化:
1, a
a, 2
2, b
b, 3
3, c
c

所以用嚴格執(zhí)行順序的Promise要寫在一條鏈上

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容