es6随手记---Promise对象

1.Promise是异步编程的解决方案,比传统的回调函数和事件要合理强大。

简单的讲,Promise就是一个容器,包含了未来某时刻才会结束的事件。

有两个特点

(1).状态不受外界影响。Promise对象有三种状态pending(进行中),fulfilled(已成功),rejected(已失败)。只有异步操作的结果能决定是那种状态,而且状态一旦确定就没法在改变。

(2).状态改变后不会再次改变,且任何时候都能拿到这个结果。Promise对象的状态改变只会有两种情况,从pending变成fulfilled,或者是从pending变成rejected,只要这两种情况发生了,状态就固定了,成为resolved(已定型)

 

Promise接收一个函数作为参数,这个函数的两个参数分别是resolve和reject,它们是两个函数,有js引擎提供,不用自己部署。

resolve和reject这两个函数的作用都是讲异步操作的结果,作为参数传递出去,只不过前者是fulfilled状态时,后者是rejected状态时。

const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
}).then(res => {
   //resolve时的回调

}).catch(res => {
   //reject时的回调

}).finally(() => {
   //不过异步操作结果如何都会执行,因此不接受任何传入参数,所以无法知道异步操作结果的状态

});

Promise实例具有then方法,接收两个then方法作为参数,第一个是状态为resolved的回掉函数,第二个是状态为rejected的回到函数,第二个可选。

then方法返回的是一个新的Promise实例,所以可以采用链式写法。

catch()是第二个then方法,即状态为rejected回调方法的别名。异步操作抛出错误,会被catch捕获,如果then方法出错也会被catch捕获。Promise对象的错误具有‘冒泡’性质,会一直向后传递,直到被捕获位置,也就是错误1一定会被下一个catch方法捕获。

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

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

Promise.all()方法接收一个数组作为参数,参数1也可以不是数组,但是必须具有Iterator接口,且每个成员都是Promise实例。

(1).只有p1,p2,p3的状态都变成fulfilled,p的状态才会变成fulfilled,这是p1,p2,p3的返回值组成一个数组,返回到p的回调函数中。

(2).p1,p2,p3中有一个变成rejected状态,p的状态就变成rejected状态,此时第一个进入rejected状态的实例的结果,会传到p的回调函数中。

只有当上面两种情况满足,才会进入p的回调函数中继续执行。

另外如果作为参数的Promise实例定义了catch方法,一旦它被rejected不会触发Promise.all()的catch方法。如果没有定义catch方法,才会触发Promise.all()的catch方法。

3.Promise.race() 同样是将多个Promise实例包装成一个Promise实例。

const p = Promise.race([p1,p2,p3])

区别在于p1,p2,p3中只要有一个实例状态改变,则p的状态也随之改变,首先改变的Promise实例的返回值,则会传入到p的回调函数中。其余据Promise.all()方法基本一样。

4.Promise.resolve() 将参数转变成Promise实例

 

 

5.Promise.reject()方法也是将参数转变成Promise实例,只不过区别在于,该实例的状态已经确定,为rejected.

 

6.Promise.try()   

当不知道或者不想去分某个函数是同步执行还是异步执行时,还想使用Promise来处理,就可以使用Promise.try()方法。

Promise.try(() => {
   //some code 
}).then(() => {

}).catch(() => {

})

这种情况下就能使用Promise.catch()方法捕获所有的同步和异步的错误。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值