Promise知识点整理

1 篇文章 0 订阅
1 篇文章 0 订阅

Promise的含义

Promise识异步编程的一种解决方案,可以看作一个可以获取异步消息的对象。

作用

避免回调地狱,提供的api可以让异步操作更加简单

三个状态

  1. Pending(进行中)
  2. Fulfilled/Resolved(已成功)
  3. Rejected(已失败)

两个特点

  1. 对象的状态不受外界影响,只由异步操作的结果决定状态
  2. 状态改变就不会再变。只能由pending变为resolved或者pending变为rejected

基础用法

var promise = new promise(function(resolve,reject){})

then的用法

then传2个参数,第一个对应resolved的回调函数,第二个对应rejected的回调函数

promise.then((res)=>{
    console.log(res)
},(err)=>{
    console.log(err)
})

catch的用法

catch是then(null,rejection)的别名,相当于then的第二个参数

promise.then((res)=>{
    console.log(res)
}).catch((res)=>{
    console.log(res)
})

状态变为resolved,再抛出错误无效

var promise = new promise(function(resolve,reject){
    resolve('ok')
    throw new Error(error)
})
promise.then((res)=>{
    console.log(res)
}).catch((res)=>{
    console.log(res)
})
//得到ok
  1. promise对象的错误具有冒泡性质,错误总会被下一个catch捕获
  2. catch方法返回的还是一个promise对象,后面还可以接着调用then

promise.all()

将多个promise实例包装成一个promise实例

基础用法

var p = Promise.all([p1,p2,p3])
  1. 参数是一个数组对象(可以不是,但必须由Iterator接口,且返回都是promise实例)
  2. 只要数组中有任意一个promise对象状态为rejected,该对象就为rejected。第一个被rejected的实例返回值传递给p。
  3. 数组所有promise对象状态都为resolved时,该对象为resolved。p1,p2,p3的返回值组成一个数组传给p的回调函数

promise.all()注意点

如果作为参数的Promise实例自身定义了catch方法,则rejected时不会触发Promise.all()的catch方法

const p1 = new Promise((resolve,reject)=>{
    resolve('hello')
}).then(result=>result)
.catch(e=>e)

const p2 = new Promise((resolve,reject)=>{
    throw new Error('报错了')
}).then(result=>result)
.catch(e=>e)

promise.all([p1,p2]).then((res)=>{
    console.log(res)
}).catch((e)=>{
    console.log(e)
})

结果为[‘hello’,Error:报错了]

  1. p2有catch方法,会返回一个新的Promise实例,该实例执行完catch方法后也会变成resolved,所以promise.all()调用then的回调函数,而不是catch。
  2. p2没有catch方法,就会调用promise.all()的catch方法,直接抛出错误

promise.race()

promise.race()同样是将多个promise实例包装成一个新的promise实例

基础用法

var p = primise.race([p1,p2,p3)]

只要p1,p2,p3中任何一个实例改变状态,p的状态就跟着改变。最先改变的promise实例的返回值就传递给p的回调函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值