手写简易版promise

  const PENDING = 'pending';
  const RESOLVED = 'resolved';
  const REJECTED = 'rejected';
  function MyPromise(fn) {
    const that = this;
    that.state = PENDING;
    that.value = null;
    that.resolvedCallbacks = [];
    that.rejectedCallbacks = [];

    function resolve(value) {
      if (that.state === PENDING) {
        that.state = RESOLVED;
        that.value = value;
        that.resolvedCallbacks.map(cb => cb(that.value));
      }
    }

    function reject(value) {
      if (that.state === PENDING) {
        that.state = REJECTED;
        that.value = value;
        that.rejectedCallbacks.map(cb => cb(that.value));
      }
    }

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

  }
  MyPromise.prototype.then = function (onFulfilled, onRejected) {

    const that = this;
    onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : v => v;
    onRejected = typeof onRejected === 'function' ? onRejected : e => {
      throw e;
    }
    if (that.state === PENDING) {
      that.resolvedCallbacks.push(onFulfilled);
      that.rejectedCallbacks.push(onRejected);
    }
    if (that.state === RESOLVED) {
      onFulfilled(that.value);
    }
    if (that.state === REJECTED) {
      onRejected(that.value);
    }
  }
  const promise1 = new MyPromise((resolve, reject) => {
      //reject('error');
      resolve(1);
    }).then(
      res => {
        console.log("##########", res);//控制台输出:########## 1
      },
      reson => {
        console.log("%%%%%%%%%%%%", reson);
      })

你可能感兴趣的:(ES6)