导入
js是单线程,同一时间只能做一件事,事件循环(EventLoop)来打破这个局面
异步任务
- ajax网络请求
- setTimeout定时函数
简易粗糙的事件循环
- 同步任务进入主线程主执行栈
- 异步任务进入任务队列
- 主任务栈任务执行完毕,从任务队列读取对应任务,推入主线程执行
宏任务与微任务
精细划分同步任务和异步任务
- 执行一个宏任务,遇到微任务就将它放到微任务事件队列中
- 当宏任务执行完后,查看微任务的事件队列,将微任务依次执行完
宏任务
- script
- seTimeout/setInterval
- postMessage、MessageChannel
- setImmediate、I/O(Node.js)
微任务
- Promise.then
- MutationObserver
- process.nextTick(Node.js)
async与await
- async用来声明一个异步方法,await用来等待异步方法执行
- async函数返回一个Promise对象
- await命令后面是Promise对象,返回该对象的结果,如果不是直接返回对应的值