console
const PENDING = 'pending'
const FULFILLED = 'fulfilled'
const REJECTED = 'rejected'
class myPromise {
constructor(fn) {
this.status = PENDING;
this.resolveQueue = [];
this.rejectQueue = [];
const _resolve = (val) => {
if(this.status != PENDING) return;
while(this.resolveQueue.length) {
const cb = this.resolveQueue.shift()
return cb(val)
}
}
const _reject = (val) => {
if(this.status != PENDING) return;
while(this.rejectQueue.length) {
const cb = this.rejectQueue.shift()
return cb(val)
}
}
fn(_resolve, _reject)
}
then(resolveFn,rejectFn){
return new myPromise((newResolve, newReject) => {
const successFun = (val) => {
const v = resolveFn(val)
return v instanceof myPromise ? v.then(newResolve, newReject) : newResolve(val)
}
const errorFun = (val) => {
const v = rejectFn(val)
return v instanceof myPromise ? v.then(newResolve, newReject) : newReject(val)
}
})
this.resolveQueue.push(successFun)
this.rejectQueue.push(errorFun)
}
}
const a = () => new myPromise((resolve,reject) => {
setTimeout(function(){
resolve(2)
},1000)
})
const b = (key) => new myPromise((resolve,reject) => {
setTimeout(function(){
resolve(2)
},1000)
})
a().then(res => {
console.log(res)
})
promise 实现