AsyncGenerator.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. var _Promise = require("@babel/runtime-corejs2/core-js/promise");
  2. var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
  3. var OverloadYield = require("./OverloadYield.js");
  4. function AsyncGenerator(gen) {
  5. var front, back;
  6. function resume(key, arg) {
  7. try {
  8. var result = gen[key](arg),
  9. value = result.value,
  10. overloaded = value instanceof OverloadYield;
  11. _Promise.resolve(overloaded ? value.v : value).then(function (arg) {
  12. if (overloaded) {
  13. var nextKey = "return" === key ? "return" : "next";
  14. if (!value.k || arg.done) return resume(nextKey, arg);
  15. arg = gen[nextKey](arg).value;
  16. }
  17. settle(result.done ? "return" : "normal", arg);
  18. }, function (err) {
  19. resume("throw", err);
  20. });
  21. } catch (err) {
  22. settle("throw", err);
  23. }
  24. }
  25. function settle(type, value) {
  26. switch (type) {
  27. case "return":
  28. front.resolve({
  29. value: value,
  30. done: !0
  31. });
  32. break;
  33. case "throw":
  34. front.reject(value);
  35. break;
  36. default:
  37. front.resolve({
  38. value: value,
  39. done: !1
  40. });
  41. }
  42. (front = front.next) ? resume(front.key, front.arg) : back = null;
  43. }
  44. this._invoke = function (key, arg) {
  45. return new _Promise(function (resolve, reject) {
  46. var request = {
  47. key: key,
  48. arg: arg,
  49. resolve: resolve,
  50. reject: reject,
  51. next: null
  52. };
  53. back ? back = back.next = request : (front = back = request, resume(key, arg));
  54. });
  55. }, "function" != typeof gen["return"] && (this["return"] = void 0);
  56. }
  57. AsyncGenerator.prototype["function" == typeof _Symbol && _Symbol.asyncIterator || "@@asyncIterator"] = function () {
  58. return this;
  59. }, AsyncGenerator.prototype.next = function (arg) {
  60. return this._invoke("next", arg);
  61. }, AsyncGenerator.prototype["throw"] = function (arg) {
  62. return this._invoke("throw", arg);
  63. }, AsyncGenerator.prototype["return"] = function (arg) {
  64. return this._invoke("return", arg);
  65. };
  66. module.exports = AsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;