promise 实现原理代码

281 阅读1分钟
  let myPromise = function(fn) {
  let _self = this;
  this.state = 'pending'; //myPromise 初始化状态
  this.result = null;  //成功时返回得结果
  this.reason = null;
  this.resolveHandler = null;
  this.rejectHandler = null;

  //异步操作成功时调用得方法 相当于你 resolve('1')
  this.resolved = val => {
    _self.state = 'resolved'; //把状态改成resolved状态
    _self.result = val;  //成功得值保存起来
    if (typeof _self.resolveHandler === 'function') {
      _self.resolveHandler(val); //执行then里面得成功函数
    }
  };

  //异步操作成功时调用得方法 相当于你 reject('1')
  this.rejected = val => {
    _self.state = 'rejected';
    _self.reason = val;
    if (typeof _self.rejectHandler === 'function') {
      _self.rejectHandler(val); //执行then里面得失败函数
    }
  };
  this._promise = {};
  this._promise._p = _self;

  this._promise.then = (resolveHandler, rejectHandler) => {
    switch (this.state) {
      case 'pending': // 如果是pending 状态就成功和失败得回调保存起来
        _self.resolveHandler =
          typeof resolveHandler === 'function' ? resolveHandler : null;
        _self.rejectHandler =
          typeof rejectHandler === 'function' ? rejectHandler : null;
        break;
      case 'resolved':
        typeof resolvedHandler === 'function' && resolvedHandler(_self.result);
        break;
      case 'rejected':
        typeof rejectedHandler === 'function' && rejectedHandler(_self.reason);
    }
  };
  //执行new promise里面转得函数
  fn(this.resolved,this.rejected)
  return this._promise
};

new myPromise(function(resolve, reject) {
  setTimeout(function(){
    resolve(11)
  },1000)
}).then(function(val) {
  console.log(val)
}, function() {});