Promise简单版

51 阅读1分钟
class TPromise<T> {
  private status: "Pending" | "Resolved" | "Rejected" = "Pending";
  private result: T | undefined;
  private fail: any;

  constructor(callback: (resolve: (res: T) => void, reject: (err: any) => void) => void) {
    const resolve = (res: T) => { this.result = res; this.status = "Resolved"; }
    const reject = (err: any) => { this.fail = err; this.status = "Rejected"; }
    callback(resolve, reject);
  }

  static reslove<T>(res: T) {
    return new TPromise<T>((resolve) => resolve(res));
  }

  static reject(err: any) {
    return new TPromise((_, reject) => reject(err));
  }

  then(cb: (res: T) => void) {
    if (this.status === "Resolved") {
      cb(this.result as T);
    }
    return this;
  }

  catch(cb: (err: any) => void) {
    if (this.status === "Rejected") {
      cb(this.fail);
    }
    return this;
  }
}

const p1: TPromise<{ a: number }> = new TPromise((resolve) => resolve({ a: 1 }));
p1.then((res) => { console.log(res); })

promise-code.png