TaskQueue.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. * Copyright (c) 2015-present, Parse, LLC.
  9. * All rights reserved.
  10. *
  11. * This source code is licensed under the BSD-style license found in the
  12. * LICENSE file in the root directory of this source tree. An additional grant
  13. * of patent rights can be found in the PATENTS file in the same directory.
  14. *
  15. * @flow
  16. */
  17. var TaskQueue = /*#__PURE__*/function () {
  18. function TaskQueue() {
  19. (0, _classCallCheck2.default)(this, TaskQueue);
  20. (0, _defineProperty2.default)(this, "queue", void 0);
  21. this.queue = [];
  22. }
  23. (0, _createClass2.default)(TaskQueue, [{
  24. key: "enqueue",
  25. value: function (task
  26. /*: () => Promise*/
  27. )
  28. /*: Promise*/
  29. {
  30. var _this = this;
  31. var taskComplete = new _promiseUtils.resolvingPromise();
  32. this.queue.push({
  33. task: task,
  34. _completion: taskComplete
  35. });
  36. if (this.queue.length === 1) {
  37. task().then(function () {
  38. _this._dequeue();
  39. taskComplete.resolve();
  40. }, function (error) {
  41. _this._dequeue();
  42. taskComplete.reject(error);
  43. });
  44. }
  45. return taskComplete;
  46. }
  47. }, {
  48. key: "_dequeue",
  49. value: function () {
  50. var _this2 = this;
  51. this.queue.shift();
  52. if (this.queue.length) {
  53. var next = this.queue[0];
  54. next.task().then(function () {
  55. _this2._dequeue();
  56. next._completion.resolve();
  57. }, function (error) {
  58. _this2._dequeue();
  59. next._completion.reject(error);
  60. });
  61. }
  62. }
  63. }]);
  64. return TaskQueue;
  65. }();
  66. module.exports = TaskQueue;