在学习js事件循环机制(event loop)时候,为了加强理解记忆,作下记录:
每个线程都会有它自己的event loop(事件循环),在event loop任务队列中分为宏任务和微任务。
macro-task(宏任务):包括整体代码script,setTimeout,setInterval
micro-task(微任务):Promise,process.nextTick
在执行过程中执行顺序为:宏任务队列中的一个宏任务——》微任务队列全部微任务,宏任务队列中的一个宏任务——》微任务队列全部微任……
看如下例子:
console.log('a');
setTimeout(function() {
console.log('b');
process.nextTick(function() {
console.log('c');
})
new Promise(function(resolve) {
console.log('d');
resolve();
}).then(function() {
console.log('e')
})
})
process.nextTick(function() {
console.log('f');
})
new Promise(function(resolve) {
console.log('g');
resolve();
}).then(function() {
console.log('h')
})
setTimeout(function() {
console.log('i');
process.nextTick(function() {
console.log('j');
})
new Promise(function(resolve) {
console.log('k');
resolve();
}).then(function() {
console.log('l')
})
})
执行结果:a g f h 、b d c e、 i k j l