functional.js 712 B

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