# 六.异步编程
前言
js 代码从上往下执行,遇到setTimeout
、setInterval
等包裹的代码块会跳过,先将其他代码执行完,然后执行之前跳过的代码
- 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
2
3
# 1.2 setInterval
setInterval(() => {
console.log(new Date())
}, 3000)
1
2
3
2
3
# 1.3 requestAnimationFrame
# 2.微任务
- promise.then
- promise catch
- MutaionObserver
- process.nextTick(node.js)
# 3.异步捕获
1.try catch finally
2.throw
3.Error