@glue42/bbg-market-data
Version:
A high-level API that wraps existing Glue42 Bloomberg Bridge Market Data interop methods. The API is based on the jBloomberg open source wrapper.
69 lines (68 loc) • 2.4 kB
JavaScript
import { __awaiter, __generator } from "tslib";
export var createSequence = function () {
var queue = [];
var isExecuting = false;
var isRun = false;
var run = function () { return __awaiter(void 0, void 0, void 0, function () {
var nextItem, action, resolve, reject, result, error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (isExecuting) {
return [2];
}
isExecuting = true;
_a.label = 1;
case 1:
if (!(queue.length > 0)) return [3, 6];
nextItem = queue.shift();
if (typeof nextItem === "undefined") {
return [3, 6];
}
if (!isRun) {
return [3, 6];
}
action = nextItem.action, resolve = nextItem.resolve, reject = nextItem.reject;
_a.label = 2;
case 2:
_a.trys.push([2, 4, , 5]);
return [4, action()];
case 3:
result = _a.sent();
resolve(result);
return [3, 5];
case 4:
error_1 = _a.sent();
reject(error_1);
return [3, 5];
case 5: return [3, 1];
case 6:
isExecuting = false;
return [2];
}
});
}); };
var enqueue = function (action) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, new Promise(function (resolve, reject) {
queue.push({ action: action, resolve: resolve, reject: reject });
if (isRun) {
run();
}
})];
});
}); };
var clear = function () {
isExecuting = false;
isRun = false;
queue.splice(0, queue.length);
};
return {
run: function () {
isRun = true;
run();
},
enqueue: enqueue,
clear: clear,
};
};