Sha256: e0469d4b83f6ba764b15f80e1766b75c136fbff68f048f4c050f0b1c7f065f69

Contents?: true

Size: 1.01 KB

Versions: 103

Compression:

Stored size: 1.01 KB

Contents

'use strict';

const kDone = Symbol('kDone');
const kRun = Symbol('kRun');

/**
 * A very simple job queue with adjustable concurrency. Adapted from
 * https://github.com/STRML/async-limiter
 */
class Limiter {
  /**
   * Creates a new `Limiter`.
   *
   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed
   *     to run concurrently
   */
  constructor(concurrency) {
    this[kDone] = () => {
      this.pending--;
      this[kRun]();
    };
    this.concurrency = concurrency || Infinity;
    this.jobs = [];
    this.pending = 0;
  }

  /**
   * Adds a job to the queue.
   *
   * @param {Function} job The job to run
   * @public
   */
  add(job) {
    this.jobs.push(job);
    this[kRun]();
  }

  /**
   * Removes a job from the queue and runs it if possible.
   *
   * @private
   */
  [kRun]() {
    if (this.pending === this.concurrency) return;

    if (this.jobs.length) {
      const job = this.jobs.shift();

      this.pending++;
      job(this[kDone]);
    }
  }
}

module.exports = Limiter;

Version data entries

103 entries across 103 versions & 6 rubygems

Version Path
isomorfeus-transport-2.5.3 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.5.2 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.5.1 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.5.0 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.4.2 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.4.1 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.4.0 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.3.1 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.3.0 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.11 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.10 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.9 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.8 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.7 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.6 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.5 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.4 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.3 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.2 node_modules/ws/lib/limiter.js
isomorfeus-transport-2.2.1 node_modules/ws/lib/limiter.js