Skip to content

Instantly share code, notes, and snippets.

@yornaath
Last active January 2, 2022 17:36
Show Gist options
  • Save yornaath/330fa1b995f0105bf9e2e275c46cbf0d to your computer and use it in GitHub Desktop.
Save yornaath/330fa1b995f0105bf9e2e275c46cbf0d to your computer and use it in GitHub Desktop.
export interface Resolve<T> {
(value: T | PromiseLike<T>): Resolvable<T>;
}
export interface Reject<T> {
(reason: T | PromiseLike<T>): Resolvable<T>;
}
export interface Resolvable<T> extends Promise<T> {
resolve: Resolve<T>;
reject: Reject<T>;
}
export const resolvable = <T>(): Resolvable<T> => {
let resolve: Resolve<T>;
let reject: Reject<T>;
let resolvable: Resolvable<T> = new Promise<T>((_resolve, _reject) => {
resolve = _resolve as Resolve<T>;
reject = _reject as Reject<T>;
}) as Resolvable<T>;
resolvable.resolve = (value) => {
resolve(value);
return resolvable;
};
resolvable.reject = (reason) => {
reject(reason);
return resolvable;
};
return resolvable;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment