一 promise是什么
- 抽象表达:promise是一门新技术,是js中进行异步编程的新解决方案
- 具体表达:promise是一个构造函数,promise对象用来封装一个异步操作获取成功/失败的值
- 异步编程:fs文件操作 数据库操作 ajax 定时器
二 promise的优点
- 指定回调函数的方式更加灵活
- 支持链式调用解决 回调地狱问题:不便阅读和处理异常
三 promise使用
- 实例对象传入两个形参 const p =new promise((resolve,reject)=>{})成功调用resolve 反之调用reject。resolve()reject()函数中可以传入形参交给promise.then进行处理
- 调用p.then(()=>{},()=>{},)第一个是成功时的回调第二个是失败时的回调
- p.catch(reason=>{console.log(reason)}) //失败执行catch函数
四 promise属性
- 对象状态属性(promisestate):pending 未决定的 resolved/fullfilled 成功 rejected 失败
- 对象结果属性(promiseresult):保存对象成功失败的结果,成功数据称为value 失败结果数据称为reason,可以通过reject resolve throw进行修改状态
五 promise方法
-
promise.resolve (参数):如果传入参数是非promise类型的对象则返回结果为成功的promise对象;如果传入参数是promise类型的对象则参数的结果决定了resolve的结果;
-
promise.reject (参数):无论传入什么都是失败的
-
promise.all (参数):包含n个promise数组,返回一个promise当所有promise都成功才成功
-
promise.race (参数):包含n个promise数组,第一个完成的结果状态就是最终的结果状态
六 promise的几个关键问题
- 改变状态无论多少个回调函数都要执行
- promise状态和回调通常情况下先调用回调函数,再改变状态;如何先改变状态再指定回调 ①在执行器中直接调用resolve()/reject()同步任务 ②延迟更长时间才调用then 异步任务
- promise串联多个操作任务:promise.then返回新的prommise产生then()的链式调用;通过then的链式调用串联多个同步/异步任务
- 异常的穿透:使用promise的then链式调用可以在最后指定失败的回调 前面任何操作出现异常都会传到最后失败的回调中处理
- 中断promise链:返回pending状态的promise对象
七 async与await函数
- async函数返回promise对象(结果由async函数执行的返回值决定)
- await函数表达式如果是promise对象则返回promise成功的值,否则直接将此作为await的返回值
- 注意:await必须写在async函数中但async函数中可以没有await ,如果await的promise失败了就会抛出异常可以通过try catch进行捕获