前端急速解決非同步之微任務和巨集任務

lio-mengxiang發表於2019-03-06

同步任務(巨集任務,微任務),非同步任務

首先看下列程式碼的執行結果

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

回到題裡面

1、第一行是同步任務,優先順序最高,所以第一次輸出1
2、後面有nextTick,是微任務,有promise是微任務,setTimeout是巨集任務,所以setTimeouut裡的程式碼最後執行
3、那就先依次執行微任務nextTick列印了2
4、接著執行另一個微任務promise,列印了5,6
5、接著執行巨集任務setTimeout,列印3
6、setTimeout裡面有一個微任務,然後執行它,列印4複製程式碼

// 所以結果就是
1
2
5
6
3
4
複製程式碼


相關文章