1 | // @flow strict-local
|
2 |
|
3 | import invariant from 'assert';
|
4 |
|
5 | export type Deferred<T> = {|
|
6 | resolve(T): void,
|
7 | reject(mixed): void
|
8 | |};
|
9 |
|
10 | export function makeDeferredWithPromise<T>(): {|
|
11 | deferred: Deferred<T>,
|
12 | promise: Promise<T>
|
13 | |} {
|
14 | let deferred: ?Deferred<T>;
|
15 | let promise = new Promise<T>((resolve, reject) => {
|
16 | deferred = {resolve, reject};
|
17 | });
|
18 |
|
19 | // Promise constructor callback executes synchronously, so this is defined
|
20 | invariant(deferred != null);
|
21 |
|
22 | return {deferred, promise};
|
23 | }
|