UNPKG

@skyway-sdk/common

Version:

The official Next Generation JavaScript SDK for SkyWay

53 lines 2.09 kB
"use strict"; 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