js 事件循环机制主要分为主线程、执行栈、异步任务队列。任务队列分为宏任务和微任务,宏任务一般是setTimeout、setInterval 。微任务有process, nextTick, promise.then(), object.observe, MutationObserver。
执行顺序
1、先执行主线程
2、遇到宏队列(macrotask)放到宏队列(macrotask)
3、遇到微队列(microtask)放到微队列(microtask)
4、主线程执行完毕
5、执行微队列(microtask),微队列(microtask)执行完毕
6、执行一次宏队列(macrotask)中的一个任务,执行完毕
7、执行微队列(microtask),执行完毕
8、依次循环。。。
示例
console.log(111);
setTimeout(function(){
console.log('setTimeout ==>>> ', 111);
}, 1000)
new Promise((resolve, reject)=> {
console.log('Promise ===>', 1111);
resolve()
}).then(()=>{
console.log('Promise then ==> ', 111);
})
setTimeout(function(){
console.log('setTimeout ==>>> ', 333);
}, 1000)
setTimeout(function(){
console.log('setTimeout ==>>> ', 222);
}, 1000)
new Promise((resolve,inject)=> {
console.log('Promise ===>', 2222);
resolve()
}).then(()=>{
console.log('Promise then ==> ', 2222);
})
结果: