TaskQueue.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  3. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
  4. var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
  5. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  6. var _promiseUtils = require("./promiseUtils");
  7. /**
  8. * @flow
  9. */
  10. /*:: type Task = {
  11. task: () => Promise,
  12. _completion: Promise,
  13. };*/
  14. var TaskQueue = /*#__PURE__*/function () {
  15. function TaskQueue() {
  16. (0, _classCallCheck2.default)(this, TaskQueue);
  17. (0, _defineProperty2.default)(this, "queue", void 0);
  18. this.queue = [];
  19. }
  20. (0, _createClass2.default)(TaskQueue, [{
  21. key: "enqueue",
  22. value: function (task /*: () => Promise*/) /*: Promise*/{
  23. var _this = this;
  24. var taskComplete = new _promiseUtils.resolvingPromise();
  25. this.queue.push({
  26. task: task,
  27. _completion: taskComplete
  28. });
  29. if (this.queue.length === 1) {
  30. task().then(function () {
  31. _this._dequeue();
  32. taskComplete.resolve();
  33. }, function (error) {
  34. _this._dequeue();
  35. taskComplete.reject(error);
  36. });
  37. }
  38. return taskComplete;
  39. }
  40. }, {
  41. key: "_dequeue",
  42. value: function () {
  43. var _this2 = this;
  44. this.queue.shift();
  45. if (this.queue.length) {
  46. var next = this.queue[0];
  47. next.task().then(function () {
  48. _this2._dequeue();
  49. next._completion.resolve();
  50. }, function (error) {
  51. _this2._dequeue();
  52. next._completion.reject(error);
  53. });
  54. }
  55. }
  56. }]);
  57. return TaskQueue;
  58. }();
  59. module.exports = TaskQueue;