promise用法

Promise对象接受一个函数作为参数,该函数的两个参数分别是resolve和reject,这两个参数都是回调函数

reslove包裹的数据为then的参数(回调函数)的参数data

reject包裹的数据为catch的参数(回调函数)的参数d

Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected只要这两种情况发生,状态就凝固了,不会再变了

所以上面代码如果reslove在reject前面 状态从pending变为fulfilled将调用then打印111  

如果reject在reslove前面 状态从pending变为rejected将调用catch打印555

链式调用

在then中如果返回一个promise对象 可以在下一个then方法中拿到其传给resolve的值

上面代码将最后打印666

promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。

var p = Promise.all([p1,p2,p3]);

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

请看下面示例:需要注意的是,promise.all()成功时,在then(result)中result是个数组

let p1 = new Promise((resolve, reject) => {
  resolve('成功了')
})

let p2 = new Promise((resolve, reject) => {
  resolve('success')
})

let p3 = Promise.reject('失败')

Promise.all([p1, p2]).then((result) => {
  console.log(result)               //['成功了', 'success']
}).catch((error) => {
  console.log(error)
})

Promise.all([p1,p3,p2]).then((result) => {
  console.log(result)
}).catch((error) => {
  console.log(error)      // 失败了,打出 '失败'
})

Promise.race() 函数返回一个 Promise,写法和all一样  它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。

Promise.race([p3,p1, p2]).then((result) => {
  console.log(result)            
}).catch((error) => {
  console.log(error)
})
 

简单解析: race含有竞速的意思,将多个Promise放在一个数组中,数组中有一个promise最先得到结果,不管是" 完成(resolved)"还是" 失败(resolved)" , 那么这个 .race 方法就会只返回这个结果,其他结果就不用管了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值