Promise原理
基本使用
const promise1 = new Promise((res, rej) =>{
//状态 pending res() //or rej()
})
promise1.then(res => {
// 状态 fulfilled 进入这里
},err => {
// 状态 rejected 进入这里
})
Promise
构造函数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的状态