clone of repo on github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

32 lines
587 B

export enum LazyStatus {
Pending,
Resolved,
Error,
}
export class Lazy<T> {
#value?: T;
#resolver: () => Promise<T>;
status: LazyStatus;
constructor(resolver: () => Promise<T>) {
this.#resolver = resolver;
this.status = LazyStatus.Pending;
}
async value(): Promise<T | null> {
if (!this.#value) {
try {
this.#value = await this.#resolver();
} catch (error) {
this.status = LazyStatus.Error;
console.error(error);
return null;
}
}
this.status = LazyStatus.Resolved;
return this.#value;
}
}