-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathutils.ts
More file actions
40 lines (34 loc) · 818 Bytes
/
utils.ts
File metadata and controls
40 lines (34 loc) · 818 Bytes
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
36
37
38
39
40
export function assertExhaustive(x: never): never {
throw new Error("Unexpected object: " + x);
}
export async function tryCatch<T, E = Error>(
promise: Promise<T> | undefined
): Promise<[null, T] | [E, null]> {
if (!promise) {
return [null, undefined as T];
}
try {
const data = await promise;
return [null, data];
} catch (error) {
return [error as E, null];
}
}
export type Deferred<T> = {
promise: Promise<T>;
resolve: (value: T) => void;
reject: (reason?: any) => void;
};
export function promiseWithResolvers<T>(): Deferred<T> {
let resolve!: (value: T) => void;
let reject!: (reason?: any) => void;
const promise = new Promise<T>((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
return {
promise,
resolve,
reject,
};
}