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); })
