TaskQueue.js 992 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _promiseUtils = require("./promiseUtils");
  7. class TaskQueue {
  8. constructor() {
  9. this.queue = [];
  10. }
  11. enqueue(task) {
  12. const taskComplete = (0, _promiseUtils.resolvingPromise)();
  13. this.queue.push({
  14. task: task,
  15. _completion: taskComplete
  16. });
  17. if (this.queue.length === 1) {
  18. task().then(() => {
  19. this._dequeue();
  20. taskComplete.resolve();
  21. }, error => {
  22. this._dequeue();
  23. taskComplete.reject(error);
  24. });
  25. }
  26. return taskComplete;
  27. }
  28. _dequeue() {
  29. this.queue.shift();
  30. if (this.queue.length) {
  31. const next = this.queue[0];
  32. next.task().then(() => {
  33. this._dequeue();
  34. next._completion.resolve();
  35. }, error => {
  36. this._dequeue();
  37. next._completion.reject(error);
  38. });
  39. }
  40. }
  41. }
  42. module.exports = TaskQueue;
  43. var _default = exports.default = TaskQueue;