/**
* 宏任务(Macrotask)
* setTimeout/setInterval
* MessageChannel
* I/O,事件队列
* setImmediate(Node环境)
* script(整体代码块)
*
* 微任务(Microtask)
* requestAnimationFrame(有争议)
* MutationObserver(浏览器环境)
* Promise.[ then/catch/finally ]
* process.nextTick(Node环境) nextTick 队列会比 Promie 队列先执行
* queueMicrotask
*/
function foo() {
console.log('foo 1');
pro().then(res => {
console.log(res);
})
setTimeout(() => {
bar()
pro1().then(res => {
console.log(res);
})
}, 0)
console.log('foo 2');
}
function bar() {
console.log('bar 1');
}
function pro() {
return new Promise((resolve, reject) => {
console.log('pro 1');
resolve('pro 2')
console.log('pro 3');
})
}
function pro1() {
return new Promise((resolve, reject) => {
console.log('pro1 1');
resolve('pro1 2')
console.log('pro1 3');
})
}
foo()
// foo 1
// pro 1
// pro 3
// foo 2
// pro 2
// bar 1
// pro1 1
// pro1 3
// pro1 2