-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.ts
38 lines (31 loc) · 800 Bytes
/
index.ts
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
export type IFuture<T> = Promise<T> & {
resolve: (x: T) => void;
reject: (x: Error) => void;
finally: (fn: () => void) => void;
isPending: boolean;
};
export function future<T = any>(): IFuture<T> {
let resolver: (x: T) => void;
let rejecter: (x: Error) => void;
const promise: any = new Promise((ok, err) => {
resolver = (x: T) => {
ok(x);
promise.isPending = false;
};
rejecter = (x: Error) => {
err(x);
promise.isPending = false;
};
}).catch(e => Promise.reject(e));
promise.resolve = resolver;
promise.reject = rejecter;
if (!("finally" in promise)) {
promise.finally = fn => {
promise.then(fn);
promise.catch(fn);
};
}
promise.isPending = true;
return promise as IFuture<T>;
}
export default future;