type Resolve = (value: T | PromiseLike) => void; type Reject = (reason: unknown) => void; const noop = () => { /** nothing */ }; export type PromiseWithResolvers = { promise: Promise; resolve: Resolve; reject: Reject; }; /** * * * @export * @template T * @returns {PromiseWithResolvers} {PromiseWithResolvers} */ export function promiseWithResolvers(): PromiseWithResolvers { let _resolve: Resolve = noop; let _reject: Reject = noop; const promise = new Promise((resolve, reject) => { _resolve = resolve; _reject = reject; }); return { promise, reject: _reject, resolve: _resolve }; }