TaskQueue.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  3. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  4. _Object$defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = void 0;
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  9. var _promiseUtils = require("./promiseUtils");
  10. class TaskQueue {
  11. constructor() {
  12. (0, _defineProperty2.default)(this, "queue", void 0);
  13. this.queue = [];
  14. }
  15. enqueue(task) {
  16. const taskComplete = (0, _promiseUtils.resolvingPromise)();
  17. this.queue.push({
  18. task: task,
  19. _completion: taskComplete
  20. });
  21. if (this.queue.length === 1) {
  22. task().then(() => {
  23. this._dequeue();
  24. taskComplete.resolve();
  25. }, error => {
  26. this._dequeue();
  27. taskComplete.reject(error);
  28. });
  29. }
  30. return taskComplete;
  31. }
  32. _dequeue() {
  33. this.queue.shift();
  34. if (this.queue.length) {
  35. const next = this.queue[0];
  36. next.task().then(() => {
  37. this._dequeue();
  38. next._completion.resolve();
  39. }, error => {
  40. this._dequeue();
  41. next._completion.reject(error);
  42. });
  43. }
  44. }
  45. }
  46. module.exports = TaskQueue;
  47. var _default = exports.default = TaskQueue;