宏任务与微任务
宏任务
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。