2019-05-21--Eventloop,瀏覽器環(huán)境 VS Node環(huán)境

例子: (來(lái)源:https://juejin.im/post/5b7057b251882561381e69bf#comment
)

setTimeout(function () {
    console.log('setTimeout1')
}, 0)
var p1 = new Promise(function (resolve, reject) {
    setTimeout(() => { resolve(1) }, 0)
})
setTimeout(function () {
    console.log('setTimeout2')
}, 0)
for (var i = 0; i < 3; i++) {
    p1.then(function (value) {
        console.log('promise then - ' + i)
    })
}

瀏覽器和Node環(huán)境下的結(jié)果不同
瀏覽器運(yùn)行結(jié)果:


image.png
依次注冊(cè)了3個(gè)macroTask, 3個(gè)microTask
執(zhí)行第一個(gè)macroTask后,再執(zhí)行第二個(gè)macroTask,再去執(zhí)行剩余的所有microTask, 再執(zhí)行最后一個(gè)macroTask

Node 運(yùn)行結(jié)果:


image.png
瀏覽器環(huán)境下,microtask的任務(wù)隊(duì)列是每個(gè)macrotask執(zhí)行完之后執(zhí)行;
在Node.js中(node11之前,node11及之后和瀏覽器一致),
microtask會(huì)在事件循環(huán)的各個(gè)階段之間執(zhí)行,也就是一個(gè)階段執(zhí)行完畢,就會(huì)去執(zhí)行microtask隊(duì)列的任務(wù)

參考:(https://juejin.im/post/5c337ae06fb9a049bc4cd218

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容