diff options
Diffstat (limited to 'FrontEnd/src/utilities')
-rw-r--r-- | FrontEnd/src/utilities/index.ts | 1 | ||||
-rw-r--r-- | FrontEnd/src/utilities/promise.ts | 35 |
2 files changed, 36 insertions, 0 deletions
diff --git a/FrontEnd/src/utilities/index.ts b/FrontEnd/src/utilities/index.ts index 7659a8aa..e280274e 100644 --- a/FrontEnd/src/utilities/index.ts +++ b/FrontEnd/src/utilities/index.ts @@ -1,5 +1,6 @@ export { default as base64 } from "./base64"; export { withQuery } from "./url"; +export { subscribePromise } from "./promise"; export function delay(milliseconds: number): Promise<void> { return new Promise<void>((resolve) => { diff --git a/FrontEnd/src/utilities/promise.ts b/FrontEnd/src/utilities/promise.ts new file mode 100644 index 00000000..96bcceac --- /dev/null +++ b/FrontEnd/src/utilities/promise.ts @@ -0,0 +1,35 @@ +export function subscribePromise<T>( + promise: Promise<T>, + resolve: Parameters<Promise<T>["then"]>[0], + reject?: Parameters<Promise<T>["then"]>[1], +): { + promise: ReturnType<Promise<T>["then"]>; + (): void; +} { + let subscribe = true; + + const p = promise.then( + resolve != null + ? (value) => { + if (subscribe) { + resolve(value); + } + } + : undefined, + reject != null + ? (error) => { + if (subscribe) { + reject(error); + } + } + : undefined, + ); + + const result = function () { + subscribe = false; + }; + result.promise = p; + + return result; +} + |