@node-pigpio/core
Version:
pigpiod client for node.js
50 lines (49 loc) • 1.35 kB
JavaScript
;
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 };