choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
122 lines (98 loc) • 3.17 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _tslib = require("tslib");
var _mobx = require("mobx");
var PromiseQueue =
/*#__PURE__*/
function () {
function PromiseQueue() {
var _this = this;
(0, _classCallCheck2["default"])(this, PromiseQueue);
this.queueing = false;
(0, _mobx.runInAction)(function () {
_this.queue = [];
});
}
(0, _createClass2["default"])(PromiseQueue, [{
key: "clear",
value: function clear(promise) {
if (!this.queueing) {
var queue = this.queue;
var index = queue.indexOf(promise);
if (index !== -1) {
queue.splice(index, 1);
}
}
}
}, {
key: "add",
value: function add(promise) {
var _this2 = this;
var queue = this.queue;
queue.push(promise);
return promise.then(function (value) {
_this2.clear(promise);
return value;
})["catch"](function (error) {
_this2.clear(promise);
throw error;
});
}
}, {
key: "ready",
value: function () {
var _ready = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee() {
var queue;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
this.queueing = true;
queue = this.queue;
if (!queue.length) {
_context.next = 6;
break;
}
_context.next = 5;
return queue.pop();
case 5:
return _context.abrupt("return", this.ready());
case 6:
this.queueing = false;
return _context.abrupt("return", Promise.resolve());
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function ready() {
return _ready.apply(this, arguments);
}
return ready;
}()
}, {
key: "length",
get: function get() {
return this.queue.length;
}
}]);
return PromiseQueue;
}();
exports["default"] = PromiseQueue;
(0, _tslib.__decorate)([_mobx.observable], PromiseQueue.prototype, "queue", void 0);
(0, _tslib.__decorate)([_mobx.action], PromiseQueue.prototype, "clear", null);
(0, _tslib.__decorate)([_mobx.action], PromiseQueue.prototype, "add", null);
(0, _tslib.__decorate)([_mobx.action], PromiseQueue.prototype, "ready", null);
//# sourceMappingURL=PromiseQueue.js.map