UNPKG

558 BJavaScriptView Raw
1// @flow strict-local
2
3import deasync from 'deasync';
4
5/**
6 * Synchronously waits for a promise to return by
7 * yielding to the node event loop as needed.
8 */
9export default function syncPromise<T>(promise: Promise<T>): T {
10 let isDone = false;
11 let res, err;
12
13 promise.then(
14 value => {
15 res = value;
16 isDone = true;
17 },
18 error => {
19 err = error;
20 isDone = true;
21 }
22 );
23
24 deasync.loopWhile(() => !isDone);
25
26 if (err) {
27 throw err;
28 }
29
30 // $FlowFixMe this is valid since we wait using deasync above
31 return res;
32}