interface Deferred { promise: Promise; resolve: (args: T) => unknown; reject: (e?: unknown) => unknown; } export default function getDeferred(): Deferred { let resolve: (args: T) => unknown; let reject: (e?: unknown) => unknown; const promise = new Promise((r, j) => { resolve = r; reject = j; }); return { promise, resolve, reject, }; } export const resolve = (data) => { const defer = getDeferred(); defer.resolve(data); return defer.promise; }; export const reject = (data) => { const defer = getDeferred(); defer.reject(data); return defer.promise; };