TaskQueue.js 1.5 KB

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