Skip to content

[总结] Promise 的实现 #23

@duyue6002

Description

@duyue6002

构造函数主体

// Promise构造函数接收一个executor函数,executor函数执行完同步或异步操作后,调用它的两个参数resolve和reject
var promise = new Promise(function(resolve, reject) {
  /*
    如果操作成功,调用resolve并传入value
    如果操作失败,调用reject并传入reason
  */
})

构造函数框架如下:

function myPromise(executor) {
  let self = this;
  self.status = "pending";
  self.data = undefined;
  self.onResolvedCallback = [];
  self.onRejectedCallback = [];
  executor(resolve, reject);
}

添加捕错机制

function myPromise(executor) {
  let self = this;
  self.status = "pending";
  self.data = undefined;
  let onResolvedCallback = [];
  let onRejectedCallback = [];

  function resolve(value) {
    // TODO
  };

  function reject(reason) {
    // TODO
  };

  try {
    executor(resolve, reject);
  } catch (error) {
    reject(error);
  }
}

添加 resolve / reject 方法

  function resolve(value) {
    if (self.status === "pending") {
      self.status = "resolved";
      self.data = value;
      for (let i = 0; i < self.onResolvedCallback.length; i++) {
        self.onResolvedCallback[i](value);
      }
    }
  };

  function reject(reason) {
    if (self.status === "pending") {
      self.status = "rejected";
      self.data = reason;
      for (let i = 0; i < self.onRejectedCallback.length; i++) {
        self.onRejectedCallback[i](reason);
      }
    }
  };

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions