promise

用 ES5 编写的简单 Promise 实现,该实现涵盖了基本的 Promise 功能,包括异步处理、then方法和错误处理:

function FakePromise(exec) {

  let self = this;
  // 初始状态为pending
  self.status = 'pending';

  // 成功的结果
  self.value = null;
  self.onFulfilledCallback=[]

  // 失败的原因
  self.reason = null;
  self.onRejectCallback=[]
  // 成功的回调
  function resolve(value) {

    if (self.status === 'pending') {
      self.value = value;
      self.status = "fulfilled";
      self.onFulfilledCallback.forEach(item=>item(value));
    }
    // fulfilled
  }

  // 失败的回调
  function reject(reason) {

    if (self.status === 'pending') {
      self.reason = reason;
      self.status = "rejected";
      self.onRejectCallback.forEach(item=>item(reason));
    }

    // rejected
  }

  try {
    exec(resolve, reject)
  } catch (error) {

  }
}


FakePromise.prototype.then = function (onFulfilled, onRejected) {
  // 状态发生改变
  onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : function (data) { resolve(data) };

  onRejected = typeof onRejected === 'function' ? onRejected : function (err) { throw err };

  if(this.status==='pending'){
    this.onFulfilledCallback.push(onFulfilled)
    this.onRejectCallback.push(onRejected)
  }

}

const p = new FakePromise((resolve, reject) => {
    console.log('new FakePromise');
    setTimeout(()=>{
      resolve('结果')
    },1000)
})

p.then((data) => console.log(data));
Contributors: masecho