话不多说直接来干货
我们已经处理好了resolve和reject中的各种情况
then中我们初步处理了一下,有一种情况我们时没有处理then中的回调函数的返回值为Promise
const PENDING = 'pending';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';
class Promise1{
constructor (executor) {
this.value = undefined;
this.reason=undefined;
this.status = PENDING;
this.onFulfilledCallbacks = [];
this.onRejectedCallbacks = [];
// 暂存then中的注册函数
const resolve=(value)=>{
if (value instanceof Promise1) {
return value.then(resolve, reject);
}
if (this.status === PENDING) {
this.value = value;
this.status = FULFILLED;
// then中暂存的函数也要执行
this.onFulfilledCallbacks.forEach(fn=>fn());
}
}
const reject = (reason) =>{
// 原生没有处理这种情况
//if (reason instanceof Promise1) {
//return reason.then(resolve, reject);