返回

手把手教你用原生语法写 Promise,扫除概念迷雾!

前端

何为 Promise?
一个 Promise 代表一个异步计算的结果。它为异步编程提供了结构化和简化的范例,让你告别繁琐的回调,在异步的世界里如鱼得水。

手写一个 Promise
首先,创建一个构造器类:

class Promise {
  constructor(callback) {
    this.status = "pending";
    callback(this._resolve, this._rejection);
  }

  _resolve = value => {
    if (this.status !== "pending") return;
    this.status = "fulfilled";
    this.value = value;
    this.onFulfill && this.onFulfill(value);
  };

  _rejection = reason => {
    if (this.status !== "pending") return;
    this.status = "rejected";
    this.error = reason;
    this.onReject && this.onReject(error);
  };

  then(onFulfill, onReject) {
    if (this.status === "pending") {
      this.onFulfill = onFulfill;
      this.onReject = onReject;
    } else if (this.status === "fulfilled") {
      onFulfill(this.value);
    } else if (this.status === "rejected") {
      onReject(this.error);
    }
  }
}

接着,生成 Promise 实例:

const promise = new Promise(resolve => {
  // 异步获取数据,并调用
  // promise.resolve(data)
  // or
  // promise.rejection(err)
});

小试牛刀
现在,我们手写一个简易的 Promise:

const myAsyncFunction = async () => {
  try {
    const data = await new Promise(resolve => {
      // 进行异步计算
      resolve(data);
    });
    // 处理 data
  } catch (err) {
    // 处理 err
  }
};

总结
手写 Promise 的旅途,不仅让你领略了 Promise 的内在,也让你对异步编程有了更深的认识。而真正的奥妙,还需在日复一日的编码中感悟,让每一次的思索,都化作编程道路上熠熠生辉的明灯。