SOURCE

console 命令行工具 X clear

                    
>
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 实现