UNPKG

501 BJavaScriptView Raw
1// @flow strict-local
2
3import invariant from 'assert';
4
5export type Deferred<T> = {|
6 resolve(T): void,
7 reject(mixed): void,
8|};
9
10export 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}