2019-05-21--Eventloop,浏览器环境 VS N

2019-05-21  本文已影响0人  安乐_f487

例子: (来源: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环境下的结果不同
浏览器运行结果:


image.png
依次注册了3个macroTask, 3个microTask
执行第一个macroTask后,再执行第二个macroTask,再去执行剩余的所有microTask, 再执行最后一个macroTask

Node 运行结果:


image.png
浏览器环境下,microtask的任务队列是每个macrotask执行完之后执行;
在Node.js中(node11之前,node11及之后和浏览器一致),
microtask会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行microtask队列的任务

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

上一篇 下一篇

猜你喜欢

热点阅读