Sha256: d1d2c39b1020b964acdc78963912a5ddd95833b43fff4e50a5d7923781af2941

Contents?: true

Size: 1.21 KB

Versions: 33

Compression:

Stored size: 1.21 KB

Contents

'use strict';

function Queue(options) {
  if (!(this instanceof Queue)) {
    return new Queue(options);
  }

  options = options || {};
  this.concurrency = options.concurrency || Infinity;
  this.pending = 0;
  this.jobs = [];
  this.cbs = [];
  this._done = done.bind(this);
}

var arrayAddMethods = [
  'push',
  'unshift',
  'splice'
];

arrayAddMethods.forEach(function(method) {
  Queue.prototype[method] = function() {
    var methodResult = Array.prototype[method].apply(this.jobs, arguments);
    this._run();
    return methodResult;
  };
});

Object.defineProperty(Queue.prototype, 'length', {
  get: function() {
    return this.pending + this.jobs.length;
  }
});

Queue.prototype._run = function() {
  if (this.pending === this.concurrency) {
    return;
  }
  if (this.jobs.length) {
    var job = this.jobs.shift();
    this.pending++;
    job(this._done);
    this._run();
  }

  if (this.pending === 0) {
    while (this.cbs.length !== 0) {
      var cb = this.cbs.pop();
      process.nextTick(cb);
    }
  }
};

Queue.prototype.onDone = function(cb) {
  if (typeof cb === 'function') {
    this.cbs.push(cb);
    this._run();
  }
};

function done() {
  this.pending--;
  this._run();
}

module.exports = Queue;

Version data entries

33 entries across 32 versions & 12 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/async-limiter/index.js
disco_app-0.18.0 test/dummy/node_modules/async-limiter/index.js
disco_app-0.18.2 test/dummy/node_modules/async-limiter/index.js
disco_app-0.16.1 test/dummy/node_modules/async-limiter/index.js
disco_app-0.15.2 test/dummy/node_modules/async-limiter/index.js
disco_app-0.18.4 test/dummy/node_modules/async-limiter/index.js
disco_app-0.18.1 test/dummy/node_modules/async-limiter/index.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/async-limiter/index.js
disco_app-0.14.0 test/dummy/node_modules/async-limiter/index.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/async-limiter/index.js
tang-0.2.1 spec/tang_app/node_modules/async-limiter/index.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/async-limiter/index.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/async-limiter/index.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/async-limiter/index.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/async-limiter/index.js
tang-0.2.0 spec/tang_app/node_modules/async-limiter/index.js
tang-0.1.0 spec/tang_app/node_modules/async-limiter/index.js
tang-0.0.9 spec/tang_app/node_modules/async-limiter/index.js
enju_library-0.3.8 spec/dummy/node_modules/async-limiter/index.js
ilog-0.4.1 node_modules/async-limiter/index.js