@skyway-sdk/common
Version:
The official Next Generation JavaScript SDK for SkyWay
53 lines • 2.09 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PromiseQueue = void 0;
const logger_1 = require("./logger");
const log = new logger_1.Logger('packages/common/src/promise.ts');
/**@internal */
class PromiseQueue {
constructor() {
this.id = Math.random().toString().slice(2);
this.queue = [];
this.running = false;
this.push = (promise) => new Promise((r, f) => {
this.queue.push({ promise, done: r, failed: f });
if (!this.running) {
this.run().catch((e) => {
log.error('push', e);
});
}
});
}
run() {
return __awaiter(this, void 0, void 0, function* () {
const task = this.queue.shift();
if (task) {
this.running = true;
// log.debug('[start] task', { id: this.id, task });
try {
const res = yield task.promise();
task.done(res);
}
catch (error) {
task.failed(error);
}
// log.debug('[end] task', { id: this.id, task });
yield this.run();
}
else {
this.running = false;
}
});
}
}
exports.PromiseQueue = PromiseQueue;
//# sourceMappingURL=promise.js.map