class MyPromise {
constructor(handle) {
if(typeof handle !== 'function'){
return 'Promise参数必须为函数'
}
this.status = 'PENDING';
this.value = null;
this.onFulfIlledQueue = [];
this.onRejectedQueue = [];
try {
handle(this.resolve.bind(this), this.reject.bind(this));
} catch {
this.reject();
}
this.then = (resolve, reject) => {
switch(this.status) {
case 'PENDING':
this.onFulfIlledQueue.push(resolve);
this.onRejectedQueue.push(reject);
break;
case 'FULFILLED':
resolve(this.value);
break;
case 'REJECTED':
reject(this.value);
}
}
}
resolve(val){
this.status = 'FULFILLED';
this.value = val;
let handle = this.onFulfIlledQueue.shift()
while(handle){
handle(val);
handle = this.onFulfIlledQueue.shift();
}
}
reject(val){
this.status = 'REJECTED';
this.value = val;
let handle = this.onRejectedQueue.shift()
while(handle){
handle(val);
handle = this.onRejectedQueue.shift();
}
}
}
new MyPromise((resolve, reject) => {
console.log('老板曰: 一秒做完手上的事来一下我办公室,做不完滚蛋')
setTimeout(() => {
if (false) { // 臣妾做不到啊
resolve('做完了手上的事,去老板办公室')
} else {
reject('做不完,滚蛋')
}
}, 1000)
}).then(res => {
console.log(`1s 后:${res}`)
}, error => {
console.log(`1s 后:${error}`)
})
console