mtcute/packages/core/src/utils/controllable-promise.ts

20 lines
548 B
TypeScript
Raw Normal View History

2021-04-08 12:19:38 +03:00
export type ControllablePromise<T = any, E = any> = Promise<T> & {
resolve(val: T): void
reject(err?: E): void
}
export function createControllablePromise<
T = any,
E = any
>(): ControllablePromise<T, E> {
let _resolve: any
let _reject: any
const promise = new Promise<T>((resolve, reject) => {
_resolve = resolve
_reject = reject
})
;(promise as ControllablePromise<T>).resolve = _resolve
;(promise as ControllablePromise<T>).reject = _reject
return promise as ControllablePromise<T>
}