UNPKG

torrent-api-ts

Version:

[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![Build Status](https://travis-ci.org/Belphemur/torrent-api-ts.svg?branch=master)](https

56 lines 1.6 kB
"use strict"; 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