一. Promise规范

https://promisesaplus.com/

二. Promise类设计

  1. class HYPromise {}
  1. function HYPromise() {}

三. 构造函数的规划

  1. class HYPromise {
  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 HYPromise {
  2. then(onFulfilled, onRejected) {
  3. // this.onFulfilled = onFulfilled
  4. // this.onRejected = onRejected
  5. // 1.判断onFulfilled、onRejected,会给默认值
  6. // 2.返回Promise resolve/reject
  7. // 3.判断之前的promise状态是否确定
  8. // onFulfilled/onRejected直接执行(捕获异常)
  9. // 4.添加到数组中push(() => { 执行 onFulfilled/onRejected 直接执行代码})
  10. }
  11. }

五. catch方法

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

六. finally

  1. class HYPromise {
  2. finally(onFinally) {
  3. return this.then(() => {onFinally()}, () => {onFinally()})
  4. }
  5. }

七. resolve/reject

八. all/allSettled

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

all:

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

allSettled:

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

九. race/any

race:

  • 情况:只要有结果

any:

  • 情况一:必须等到一个resolve结果
  • 情况二:都没有resolve,所有的都是reject