TaskQueue.js 1.4 KB

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