parse
Version:
Parse JavaScript SDK
48 lines (47 loc) • 1.36 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _promiseUtils = require("./promiseUtils");
class TaskQueue {
constructor() {
(0, _defineProperty2.default)(this, "queue", void 0);
this.queue = [];
}
enqueue(task) {
// eslint-disable-next-line
const taskComplete = (0, _promiseUtils.resolvingPromise)();
this.queue.push({
task: task,
_completion: taskComplete
});
if (this.queue.length === 1) {
task().then(() => {
this._dequeue();
taskComplete.resolve();
}, error => {
this._dequeue();
taskComplete.reject(error);
});
}
return taskComplete;
}
_dequeue() {
this.queue.shift();
if (this.queue.length) {
const next = this.queue[0];
next.task().then(() => {
this._dequeue();
next._completion.resolve();
}, error => {
this._dequeue();
next._completion.reject(error);
});
}
}
}
var _default = exports.default = TaskQueue;