Promise学习笔记

Promise介绍与基本使用

理解

Promise是JS中进行异步编程的新解决方案(旧方案是单纯使用回调函数)

从语法上看,Promise是一个构造函数

从功能上看,Promise对象用来封装一个异步操作并可以获取其成功和失败的结果值

优点

指定回调函数的方式更加灵活

   旧的:必须在启动异步任务前指定

   promise:启动异步任务 => 返回promise对象 => 给promise对象绑定回调函数(甚至可以在异步任务结束后指定多个)

支持链式调用,可以解决回调地狱问题

   回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果说嵌套的回调执行的条件

   回调地狱的缺点:不便于阅读,不便于异常处理

   解决方案:promise链式调用

promise的状态

对象实例中的属性 PromiseState

pending 未决定的

resolved 成功

rejected 失败

对象实例中的属性 PromiseResult 

保存着对象成功/失败的结果

resolve  成功的结果数据一般称为value

reject  失败的结果数据一般称为reason

工作流程

Promise API

1.Promise构造函数:Promise(executor){}

(1) executor函数:(resolve,reject)=>{}    执行器

(2) resolve函数:内部定义成功时调用的函数  value => {}

(3) reject函数:内部定义失败时调用的函数 reason => {}

说明:executor会在Promise内部立即同步调用,异步操作在执行器中执行

2.Promise.prototype.then 方法:(onResolved,onRejected)=>{}

(1)onResolved函数:成功的回调函数 (value) => {}

(2)onRejected函数:失败的回调函数 (reason) => {}

说明:resolve函数将成功的值通过参数传递给onResolved函数,reject函数将成功的值通过参数传递给onRejected函数,then会返回一个新的promise对象

3.Promise.prototype.catch 方法:(onRejected)=>{}

onRejected函数:失败的回调函数 (reason) => {}

4.Promise.resolve 方法:(value) => {}

value:数据或promise对象

说明:返回一个成功/失败的promise对象

    value传入的值为非Promise类型的对象,则返回的结果为成功promise对象

       PromiseState:fulfilled   PromiseResult:value

    value传入的参数为Promise对象,则参数的结果决定了resolve的结果

      PromiseState:fulfilled   PromiseResult:resolve的参数

      PromiseState:rejected   PromiseResult:rejected的参数  

5.Promise.reject 方法:(reason) => {}

reason:失败的原因

说明:返回一个失败的promise对象 

PromiseState:rejected   PromiseResult:reason

6.Promise.all 方法:(promises) => {}

promises: 包含n个promise的数组

说明:返回一个新的promise,只有所有的promise都成功才成功,结果为所有的promise结果组成的数组,只要有一个失败了就失败,结果为第一个失败的promise的结果

6.Promise.race 方法:(promises) => {}  

promises: 包含n个promise的数组

说明:返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态

Promise 关键问题

改变promise状态

1.调用resolve()  pending => resolved

2.调用reject()  pending => rejected

3.抛出错误throw string pending => rejected

一个promise指定多个成功/失败回调函数,当promise改变为对应状态时都会调用

改变promise状态和指定回调函数的先后顺序

(1)都有可能,正常情况下是先指定回调再改变状态(resolve()/reject()在异步任务执行后执行)

(2)先改状态再指定回调

   在执行器中直接调用resolve()/reject()

   延迟更长时间才调用then()

 (3)什么时候得到数据

   如果是先指定的回调,当状态发生改变时,回调函数就会调用,得到数据

   如果先改变的状态,当指定回调时,回调函数就会调用,得到数据

promise.then()返回的新promise的结果状态由什么决定

   简单表述:由then()指定的回调函数执行的结果决定

   详细表述:

       回调函数抛出错误

       

     回调函数返回结果是非Promise类型的对象  无retuun则为defined

        

 回调函数返回结果是Promise类型的对象  

        

 promise异常穿透

(1)当使用promise的then链式调用时,可以在最后指定失败的回调

(2)前面任何的操作出现了异常,都会传到最后的失败的回调中处理

       

 中断promise链

(1)当使用promise的then链式调用时,在中间间断,不再调用后面的回调函数

(2)方法:在回调函数中返回一个pendding状态的promise对象

 

Promise 自定义封装

async 与 await

async函数

  函数的返回值为promise对象

promise对象的结果值由async函数执行的返回值决定(和then的结果值相同)

await表达式

  await右侧的表达式一般为promise对象,但也可以是其他值

  如果表达式是promise对象,await返回的是promise成功的值

  如果表达式是其他值,直接将此值作为await的返回值

注意

   await必须写在async函数中,但async函数中可以没有await

   如果await的promise失败了,就会抛出异常,需要通过try...catch捕获处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值