UNPKG

1.05 kBJavaScriptView Raw
1let pendingPromise = null;
2
3/**
4 * Gets the promise corresponding to a previous invocation of `set`.
5 *
6 * @return {Promise}
7 *
8 * @throws {Error} If you call `get` before calling `set`.
9 */
10function 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 * Stores a promise and returns a Node errback that, when called, will resolve or reject the promise.
20 *
21 * The promise can be retrieved using `get`.
22 *
23 * @return {Function} An errback.
24 *
25 * @throws {Error} If you call `set` twice before calling `get`.
26 */
27function 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
42function _flush() {
43 pendingPromise = null;
44}
45
46module.exports = {
47 get,
48 set,
49 _flush // Exposed for unit tests.
50};