torrent-api-ts
Version:
[](https://github.com/semantic-release/semantic-release) [](https
56 lines • 1.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const QueuedPromise_1 = require("./QueuedPromise");
/**
* Throttle the promise and only execute them one at a time
*/
class PromiseThrottler {
/**
*
* @param {number} delayBetweenPromise in milliseconds
*/
constructor(delayBetweenPromise) {
this._queue = [];
this._lastStart = 0;
this._delayBetweenPromise = delayBetweenPromise;
}
/**
* Delay between promises
* @param {number} value
*/
set delayBetweenPromise(value) {
this._delayBetweenPromise = value;
}
/**
* Add a promise to the queue
* @param {PromiseFactory<T>} promiseFactory
* @returns {Promise<T>}
*/
add(promiseFactory) {
return new Promise((resolve, reject) => {
this._queue.push(new QueuedPromise_1.QueuedPromise(resolve, reject, promiseFactory));
this._dequeue();
});
}
_dequeue() {
if (this._queue.length === 0) {
return;
}
const elapsedTime = Date.now() - this._lastStart;
if (elapsedTime < this._delayBetweenPromise) {
setTimeout(() => this._dequeue(), this._delayBetweenPromise - elapsedTime);
return;
}
this._execute();
}
_execute() {
const selected = this._queue.shift();
if (!selected) {
return;
}
this._lastStart = Date.now();
selected.execute();
}
}
exports.PromiseThrottler = PromiseThrottler;
//# sourceMappingURL=PromiseThrottler.js.map
;