最近在研究事件循环,看到了一篇不错的博文,阅读学习后,对于博主的举的一个例子,有些疑惑,大家帮忙看看!
console.log('1')
setTimeout(function () {
console.log('2')
process.nextTick(function () {
console.log('3')
})
new Promise(function (resolve) {
console.log('4')
resolve()
}).then(function () {
console.log('5')
})
})
process.nextTick(function () {
console.log('6')
})
new Promise(function (resolve) {
console.log('7')
resolve()
}).then(function () {
console.log('8')
})
setTimeout(function () {
console.log('9')
process.nextTick(function () {
console.log('10')
})
new Promise(function (resolve) {
console.log('11')
resolve()
}).then(function () {
console.log('12')
})
})
根据博主的分享,最后输出顺序是 1,7,6,8,2,4,3,5,9,11,10,12
但是我在node中运行里一下,输出顺序是1 7 6 8 2 4 9 11 3 10 5 12
我个人理解的是,在第二轮事件循环的时候,执行setTimeout1, setTimeout2 把其中的微任务,放到一个队列中,setTimeout1,setTimeout2执行完后,执行微任务-----> [process2,then2,process3, then3], 但是输出顺序process3提到了then2前面变成--->
[process2,process3,then2, then3]
看到process.nextTick就不用期望什么顺序了。官方文档解释事件循环已经吧process.nextTick单独拿出来说了
看还是看官方的文档比较妥当