以前只知道事件队列,不知道,任务也分:宏仁务、微任务
宏任务:包括整体代码script,setTimeout,setInterval
微任务:Promise的then,catch,process.nextTick
不同类型的任务会进入对应的Event Queue,比如setTimeout
和setInterval
会进入相同的Event Queue.
执行一次宏仁务,再执行所有的微任务;再执行一次宏仁务,再执行所有的微任务;一直循环直到全部执行完毕
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
学习来源 一篇大神的博客:https://juejin.im/post/59e85eebf265da430d571f89