实现promise

 class MyPromise {
  constructor(fn){
    this.res = null;
    this.err = null;
    this.status = 'PENDING';

    this.onResolveCallbacks = [];//存放成功的回调
    this.onRejectCallbacks = [];//存放失败的回调


    try {
      fn((res) => {
        this.status = 'resolved';
        this.res = res;
        this.onResolveCallbacks.forEach(fn => fn())
      }, (err) => {
        this.status = 'rejected';
        this.err = err
        this.onRejectCallbacks.forEach(fn => fn())
      })
    } catch (error) {
      console.log(error)
    }

  }
  //成功的回调函数
  then(onFulfilled, onRejected) {
    let self = this;
    if (this.status === 'resolved') {//成功
      onFulfilled(self.res);
    }

    if (this.status === 'rejected') {//失败
      onRejected(self.err);
    }

    //如果promise的状态是 pending,需要将 onFulfilled 和 onRejected 函数存放起来,等待状态确定后,再依次将对应的函数执行
    if (this.status === 'PENDING'){
      this.onResolveCallbacks.push(()=>{
        onFulfilled(self.res)
      })
      this.onRejectCallbacks.push(() => {
        onFulfilled(self.err)
      })
    }
  }
}

let p = new MyPromise((resolve,reject)=>{
 resolve('1')
})

p.then((res)=>{
  //成功的回调
  console.log(res,'成功')
},(err)=>{
  console.log(err,'失败')
})

 

posted @ 2019-11-20 17:01  瑞瑞大人  阅读(1619)  评论(0编辑  收藏  举报