宏任务与微任务
宏任务
- 整体代码script,定时器,I/O,UI rendering
微任务 - promise,async/await
js的执行方式就是,先执行宏任务,再执行微任务,宏任务中包含微任务
setTimeout(() => {
console.log('setTimeout-1');
})
console.log('主线程-1');
let pro = new Promise(resolve => {
console.log('Promise-1');
resolve('resolve-1')
})
pro.then(res => {
console.log('then-1');
setTimeout(() => {
console.log('setTimeout-3');
return ''
})
}).then(res => {
console.log('then-2');
return ''
})
console.log('主线程-2');
setTimeout(() => {
console.log('setTimeout-2');
new Promise(resolve => {
console.log('Promise-2');
resolve('resolve-2')
}).then(res => {
console.log('then2-1');
return ''
}).then(res => {
console.log('then2-2');
return ''
})
})
- 遇到第一个setTimeout,将其放入到宏任务进程1中
- 打印
主线程-1
- 遇到第一个new Promise,回掉函数是同步,但是then是异步
- 打印
Promise-1
- then是异步,放入到主进程微任务中
- 打印
主线程-2
- 遇到第二个setTimeout,将其放入到宏任务进程2中
- 执行主进程微任务
- 打印
then-1
- 遇到第三个setTimeout,将其放入到宏任务进程3中
- 打印
then-2
- 执行宏任务进程1
- 打印
setTimeout-1
- 执行宏任务进程2
- 打印
setTimeout-2
- 遇到第一个new Promise,回掉函数是同步,但是then是异步
- 打印
Promise-2
- then是异步,放入到宏任务进程2微任务中
- 执行宏任务进程2微任务
- 打印
then2-1
- 打印
then2-2
- 执行宏任务进程3
- 打印
setTimeout-3