1. Promise
表示(管理)一个异步操作最终状态和结果值的对象
1.2 为什么要学习Promise
成功和失败状态,可以关联对应的处理程序
了解 axios 内部原理
1.3 Promise 使用步骤
- 创建Promise对象
- 执行异步任务-并传递结果
成功调用: resolve(值) 触发 then()执行
失败调用:reject(值) 触发 catch() 执行
- 接收结果
new Promise((resolve,reject) => {
setTimeOut( () => {
resolve('......')
})
}).then( res => {
console.log(res)
})
1.4 回调函数地狱
在回调函数一直向下嵌套回调函数,就会形成回调函数地狱
问题:
可读性差,异常捕获困难,耦合性严重
解决方案:
Promise的链式调用
async/await
2.事件循环
2.1 什么是事件循环?
执行代码和收集异步任务,在调用栈空闲时,反复调用任务队列里回调函数执行机制
2.2 为什么要有事件循环?
JavaScript是单线程的,为了不阻塞JS引擎,设计执行代码的模型
2.3 JS内代码如何执行?
- 执行同步代码,遇到异步代码交给宿主浏览器环境执行
- 异步有了结果后,把回调函数放入任务队列中排队
- 当调用栈空闲后,反复调用任务队列里的回调函数
宏任务 与 微任务
- 什么是宏任务?
浏览器执行的异步代码
例如:JS执行脚本事件,setTimeOut / setInterval, AJAX请求完成事件,用户交互事件等。
- 什么是微任务
JS引擎执行的异步代码
例如:Promise对象.then()的回调 ----> Promise对象本身是同步的
- JS 内代码如何执行?
执行第一个script脚本事件宏任务,里面同步代码
遇到 宏任务/ 微任务 交给宿主环境,有结果回调函数进入对应队列
当执行栈空闲时,清空微任务队列,在执行下一个宏任务,从头再来