一、Promise类设计
class MyPromise{}
二、构造函数的规划
class MyPromise{
constructor(executor){
// 定义状态
// 定义resolve、reject回调
// resolve执行微任务队列:改变状态、获取value、then传入成功的回调
// reject执行微任务队列:改变状态、获取reason、then传入失败的回调
// try catch
executor(resolve,reject)
}
}
三、then方法的实现
class MyPromise{
then(onFulfilled,onRejected){
// 1.判断onFulfilled、onRejected若没有值,则给默认值
// 2.返回新的Promise resolve/reject
// 3.判断之前的promise状态是否确定
// 3.1 若确定则onFulfilled/onRejected直接执行(捕获异常)
// 3.2 不确定则添加到数组中 push(()=>{执行 onFulfilled/onRejected})
}
}
四、catch方法
class MyPromise{
catch(onRejected){
return this.then(undefined,onRejected)
}
}
五、finally方法
class MyPromise{
catch(onFinally){
return this.then(onFinally,onFinally)
}
}
六、resolve/reject
resolve:相当于new MyPromise((resolve)=>{resolve(xxx)})
rejcet:相当于new MyPromise((resolve,rejcet)=>{rejcet(xxx)})
七、all/allSettled
核心:要知道new Promise的resolve、reject在什么情况下执行
all:
- 情况一:所有都有正确的结果
- 情况二:有一个reject
allSettled:
- 情况:所有都有结果,并一定执行resolve
八、race/any
race:
- 情况:只要结果
any:
- 情况一:必须等到一个resolve结果
- 情况二:所有都为rejcet,给一个所有错误的集合