aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/utilities/promise.ts
blob: 96bcceac2baf7d6090ae78cee5fcaf900a9bcb01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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;
}