UNPKG

@node-pigpio/core

Version:
50 lines (49 loc) 1.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PromiseQueue = void 0; class PromiseQueue { constructor(maxPendingPromises = 1) { this.pendingPromises = 0; this.maxPendingPromises = 1; this.queue = []; this.maxPendingPromises = maxPendingPromises; } add(p) { return new Promise((resolve, reject) => { const pending = () => { p() .then((v) => { resolve(v); this.pendingPromises -= 1; this.dequeue(); }) .catch((err) => { reject(err); this.pendingPromises -= 1; this.dequeue(); }); }; this.queue.push(pending); this.dequeue(); }); } dequeue() { if (this.pendingPromises >= this.maxPendingPromises) { return; } const item = this.queue.shift(); if (!item) { return; } this.pendingPromises += 1; item(); } getQueueLength() { return this.queue.length; } getPendingLength() { return this.pendingPromises; } } exports.PromiseQueue = PromiseQueue; exports.default = { PromiseQueue };