@slonik/utilities
Version:
A Node.js PostgreSQL client with strict types, detailed logging and assertions.
30 lines (24 loc) • 549 B
text/typescript
export type DeferredPromise<T> = {
promise: Promise<T>;
reject: (error: Error) => void;
resolve: (value: T) => void;
};
export const defer = <T>(): DeferredPromise<T> => {
let resolve!: (value: T) => void;
let reject!: (error: Error) => void;
const promise = new Promise<T>((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
if (!resolve) {
throw new Error('Expected resolve');
}
if (!reject) {
throw new Error('Expected reject');
}
return {
promise,
reject,
resolve,
};
};