开发者社区 问答 正文

手写一个 Promise(中高级必考)

手写一个 Promise(中高级必考)

展开
收起
kun坤 2019-11-28 14:07:11 533 分享 版权
1 条回答
写回答
取消 提交回答
  • function myPromise(constructor) {
      let self = this;
      self.status = "pending";
      //定义状态改变前的初始状态
      self.value = undefined;
      //定义状态为resolved的时候的状态
      self.reason = undefined;
      //定义状态为rejected的时候的状态
      function resolve(value) {
        //两个==="pending",保证了状态的改变是不可逆的
        if (self.status === "pending") {
          self.value = value;
          self.status = "resolved";
        }
      }
      function reject(reason) {
        //两个==="pending",保证了状态的改变是不可逆的
        if (self.status === "pending") {
          self.reason = reason;
          self.status = "rejected";
        }
      }
      //捕获构造异常
      try {
        constructor(resolve, reject);
      } catch (e) {
        reject(e);
      }
    }
    
    //同时,需要在 myPromise的原型上定义链式调用的 then方法:
    myPromise.prototype.then = function(onFullfilled, onRejected) {
      let self = this;
      switch (self.status) {
        case "resolved":
          onFullfilled(self.value);
          break;
        case "rejected":
          onRejected(self.reason);
          break;
        default:
      }
    };
    
    //测试一下:
    var p = new myPromise(function(resolve, reject) {
      resolve(1);
    });
    p.then(function(x) {
      console.log(x);
    });
    
    
    2019-11-28 14:07:27
    赞同 展开评论
问答分类:
问答地址: