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

例子: (来源: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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容