前端急速解決異步之微任務和宏任務

同步任務(宏任務,微任務),異步任務

首先看下列代碼的執行結果promise

console.log(1)
process.nextTick(function(){
    console.log(2)
})
setTimeout(function(){
    console.log(3)
    process.nextTick(function(){
        console.log(4)
    })
})
Promise.resolve().then(function() {
    console.log(5);
}).then(function() {
    console.log(6)
});複製代碼

同步任務、微任務、宏任務的執行優先級以下:瀏覽器

同步任務 > 微任務 > 宏任務複製代碼

宏任務包括

# 瀏覽器 Node
I/O
setTimeout
setInterval
setImmediate
requestAnimationFrame

微任務包括

# 瀏覽器 Node
process.nextTick
MutationObserver
Promise.then catch finally

回到題裏面bash

一、第一行是同步任務,優先級最高,因此第一次輸出1
二、後面有nextTick,是微任務,有promise是微任務,setTimeout是宏任務,因此setTimeouut裏的代碼最後執行
三、那就先依次執行微任務nextTick打印了2
四、接着執行另外一個微任務promise,打印了5,6
五、接着執行宏任務setTimeout,打印3
六、setTimeout裏面有一個微任務,而後執行它,打印4複製代碼

// 因此結果就是
1
2
5
6
3
4
複製代碼
相關文章
相關標籤/搜索