一、Promise类设计

  1. class MyPromise{}

二、构造函数的规划

  1. class MyPromise{
  2. constructor(executor){
  3. // 定义状态
  4. // 定义resolve、reject回调
  5. // resolve执行微任务队列:改变状态、获取value、then传入成功的回调
  6. // reject执行微任务队列:改变状态、获取reason、then传入失败的回调
  7. // try catch
  8. executor(resolve,reject)
  9. }
  10. }

三、then方法的实现

  1. class MyPromise{
  2. then(onFulfilled,onRejected){
  3. // 1.判断onFulfilled、onRejected若没有值,则给默认值
  4. // 2.返回新的Promise resolve/reject
  5. // 3.判断之前的promise状态是否确定
  6. // 3.1 若确定则onFulfilled/onRejected直接执行(捕获异常)
  7. // 3.2 不确定则添加到数组中 push(()=>{执行 onFulfilled/onRejected})
  8. }
  9. }

四、catch方法

  1. class MyPromise{
  2. catch(onRejected){
  3. return this.then(undefined,onRejected)
  4. }
  5. }

五、finally方法

  1. class MyPromise{
  2. catch(onFinally){
  3. return this.then(onFinally,onFinally)
  4. }
  5. }

六、resolve/reject

  1. resolve:相当于new MyPromise((resolve)=>{resolve(xxx)})
  2. rejcet:相当于new MyPromise((resolve,rejcet)=>{rejcet(xxx)})

七、all/allSettled

核心:要知道new Promise的resolve、reject在什么情况下执行

all:

  • 情况一:所有都有正确的结果
  • 情况二:有一个reject

allSettled:

  • 情况:所有都有结果,并一定执行resolve

八、race/any

race:

  • 情况:只要结果

any:

  • 情况一:必须等到一个resolve结果
  • 情况二:所有都为rejcet,给一个所有错误的集合