_async_generator_delegate.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = _asyncGeneratorDelegate;
  6. function _asyncGeneratorDelegate(inner, awaitWrap) {
  7. var iter = {}, waiting = false;
  8. function pump(key, value) {
  9. waiting = true;
  10. value = new Promise(function(resolve) {
  11. resolve(inner[key](value));
  12. });
  13. return {
  14. done: false,
  15. value: awaitWrap(value)
  16. };
  17. }
  18. if (typeof Symbol === "function" && Symbol.iterator) {
  19. iter[Symbol.iterator] = function() {
  20. return this;
  21. };
  22. }
  23. iter.next = function(value) {
  24. if (waiting) {
  25. waiting = false;
  26. return value;
  27. }
  28. return pump("next", value);
  29. };
  30. if (typeof inner.throw === "function") {
  31. iter.throw = function(value) {
  32. if (waiting) {
  33. waiting = false;
  34. throw value;
  35. }
  36. return pump("throw", value);
  37. };
  38. }
  39. if (typeof inner.return === "function") {
  40. iter.return = function(value) {
  41. return pump("return", value);
  42. };
  43. }
  44. return iter;
  45. }