1 | let pendingPromise = null;
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function get() {
|
11 | if (!pendingPromise) throw new Error('`get` called before calling `set`');
|
12 |
|
13 | let promise = pendingPromise;
|
14 | pendingPromise = null;
|
15 | return promise;
|
16 | }
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | function set() {
|
28 | if (pendingPromise) throw new Error('`set` called twice before calling `get`');
|
29 |
|
30 | let resolve, reject;
|
31 | pendingPromise = new Promise((res, rej) => {
|
32 | resolve = res;
|
33 | reject = rej;
|
34 | });
|
35 |
|
36 | return function(err, res) {
|
37 | if (err) reject(err);
|
38 | else resolve(res);
|
39 | };
|
40 | }
|
41 |
|
42 | function _flush() {
|
43 | pendingPromise = null;
|
44 | }
|
45 |
|
46 | module.exports = {
|
47 | get,
|
48 | set,
|
49 | _flush // Exposed for unit tests.
|
50 | };
|