# 六.异步编程

前言

js 代码从上往下执行,遇到setTimeoutsetInterval等包裹的代码块会跳过,先将其他代码执行完,然后执行之前跳过的代码

  • 1.script中代码作为宏任务进入主线程执行
  • 2.同步任务立即执行,宏任务进入宏任务队列,微任务进入微任务队列
  • 3.宏任务结束后,执行微任务队列任务,期间产生的宏任务进入宏任务队列,微任务进入微任务队列,直到清空微任务队列
  • 4.ui render
  • 5.web worker
  • 6.重复2步骤

# 1.宏任务

  • 整体script代码
  • 定时器setTimeout、setInterval
  • I/O输入输出
  • UI render
  • postMessage
  • MessageChannel
  • requestAnimationFrame
  • setImmediate(node.js)

# 1.1 setTimeout

setTimeout(() => {
  console.log(new Date())
}, 3000)
1
2
3

# 1.2 setInterval

setInterval(() => {
  console.log(new Date())
}, 3000)
1
2
3

# 1.3 requestAnimationFrame

# 2.微任务

  • promise.then
  • promise catch
  • MutaionObserver
  • process.nextTick(node.js)

# 3.异步捕获

  • 1.try catch finally

  • 2.throw

  • 3.Error