event loop

宏任务与微任务

宏任务

  1. 整体代码script,定时器,I/O,UI rendering
    微任务
  2. 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 ''
  })
})
  1. 遇到第一个setTimeout,将其放入到宏任务进程1中
  2. 打印主线程-1
  3. 遇到第一个new Promise,回掉函数是同步,但是then是异步
  4. 打印Promise-1
  5. then是异步,放入到主进程微任务中
  6. 打印主线程-2
  7. 遇到第二个setTimeout,将其放入到宏任务进程2中
  8. 执行主进程微任务
  9. 打印then-1
  10. 遇到第三个setTimeout,将其放入到宏任务进程3中
  11. 打印then-2
  12. 执行宏任务进程1
  13. 打印setTimeout-1
  14. 执行宏任务进程2
  15. 打印setTimeout-2
  16. 遇到第一个new Promise,回掉函数是同步,但是then是异步
  17. 打印Promise-2
  18. then是异步,放入到宏任务进程2微任务中
  19. 执行宏任务进程2微任务
  20. 打印then2-1
  21. 打印then2-2
  22. 执行宏任务进程3
  23. 打印setTimeout-3
上一篇:js中setTimeout()的用法


下一篇:vue项目如何实现每隔多长时间请求一次接口???