1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.once = once;
|
7 | var _async = require("./async");
|
8 | function once(fn) {
|
9 | let result;
|
10 | let resultP;
|
11 | return function* () {
|
12 | if (result) return result;
|
13 | if (!(yield* (0, _async.isAsync)())) return result = yield* fn();
|
14 | if (resultP) return yield* (0, _async.waitFor)(resultP);
|
15 | let resolve, reject;
|
16 | resultP = new Promise((res, rej) => {
|
17 | resolve = res;
|
18 | reject = rej;
|
19 | });
|
20 | try {
|
21 | result = yield* fn();
|
22 | resultP = null;
|
23 | resolve(result);
|
24 | return result;
|
25 | } catch (error) {
|
26 | reject(error);
|
27 | throw error;
|
28 | }
|
29 | };
|
30 | }
|
31 | 0 && 0;
|
32 |
|
33 |
|