Promise原理

基本使用

const promise1 = new Promise((res, rej) =>{
  //状态 pending res() //or rej()
   })
promise1.then(res => {

  // 状态 fulfilled 进入这里

},err => {

  // 状态 rejected 进入这里

})

Promise

状态:
0 - pending
1 - fulfilled with _value
 2 - rejected with _value
3 - 接受另一个promise的状态, _value
 
一旦状态不是pedding,就不能再变化
 

构造函数Promise必须接收一个函数作为参数,此处成为handler

handler又接收两个函数作为参数resolve,和reject

当执行resolve【promise.state是pending】时, 改变promise.state为fulfilled,如果此promise实例通过then的第一个参数绑定的成功回调,此时会执行此成功回调

当执行reject或执行过程遇到错误【promise.state是pending】时,改变promise.state为rejected ,如果此promise实例通过then的第二个参数或catch绑定的失败回调,此时会执行此失败回调

 

promise的【pedding 状态】的逻辑是属于同步执行

promise的状态变化发生在异步时,它的回调才属于异步执行

Promise的then方法

promise.then(onFulfilled, onRejected)

onFulfilled,promise状态为fulfilled时执行此回调onFulfilled, 参数由resolve(参数)传递

onRejected,promise状态为rejected时执行此回调onRejected, 参数由rejected(参数)传递

返回一个新的promise,此promise的状态:

  • 如果onFulfilled和onRejected返回一个非promise,新promise状态是fulfilled
  • 如果onFulfilled和onRejected返回一个promise,等待promise的状态,新promise状态沿用此这个被返回的promise的状态
  • 如果onFulfilled和onRejected执行过程抛出错误,新promise状态是rejected
  • 如果onFulfilled和onRejected不是函数,沿用then对应promise的状态

Promise的catch方法

catch 相当于 promise.then(null, onRejected)

promise状态为rejected时执行此回调onRejected,参数由rejected(参数)传递

 返回一个新的promise,此promise的状态:

  • 如果onRejected返回一个非promise,新promise状态是fulfilled
  • 如果onRejected返回一个promise,等待promise的状态,新promise状态沿用此这个被返回的promise的状态
  • 如果onRejected执行过程抛出错误,新promise状态是rejected
  • 如果onRejected不是函数,沿用then对应promise的状态

Promise的finally方法

promise.finally(cb)

但promise状态发生变化,不管是Fulfilled和Rejected,但执行此方法传入的回调

静态方法resolve

返回一个promise实例,并执行resolve()使其状态变成fullfilled,如果有绑定成功回调然后执行成功回调

静态方法reject

返回一个promise实例,并执行reject()使其状态变成rejected,如果有绑定失败回调然后执行失败回调

静态方法all

接收一个数组,数组中是多个promise实例

并行执行多个promise, 当所有的promise状态都发生变化后,执行回调,回调接收的数组,数组的每个单元是跟all传入的promise的onFulfilled和onRejected传递值一一对应

静态方法race

接收一个数组,数组中是多个promise实例

并行执行多个promise,只要一个promise状态都发生变化后,此状态作为 返回的一个新的promise的状态

 

原文地址:https://www.cnblogs.com/baixinL/p/14284028.html