我这里只是写一个更短的例子来说明一下:
html和node代码一样:
console.log(1);
setTimeout(() => {
Promise.resolve(console.log(2))
.then(() => console.log(3))
});
setTimeout(() => {
Promise.resolve(console.log(4))
.then(() => console.log(5))
});
console.log(6);
html的script标签里贴上该代码,执行结果是:
1,6,2,3,4,5
node里贴上该代码,执行结果是:
1,6,2,4,3,5
这里的重要区别是html只会按照任务队列的顺序进行执行。
而node里有一个timer过程,会执行时间到的计时器。
比如任务队列里有好几个timerout时间都到了,node会先取出最前面的执行,完事后,再取下一个,直到没有timeout可以执行了,就执行相关的微任务。
所以:
html的微任务是挂到一次执行栈结束后的末尾等待执行,所以比宏任务早。
node的微任务是由其引擎决定执行时机。在6大阶段的后面。
具体看顶部的链接。