This post was written for Nodejitsu blog and is crossposted here. Nodejitsu loved what I was doing at npmawesome.com and is now supporting the project.

queue (GitHub: jessetane/queue, License: MIT) by Jesse Tane is a 130 line implementation of asynchronous function queue with adjustable concurrency. This allows your to schedule a bunch of async jobs and throttle them for whatever reason. This is pretty useful when you want to avoid overwhelming the system, be that a remote host or a local CPU.

npm install queue

Usage

queue exports a class Queue that implements most of the Array API. Pass async functions (ones that accept a callback) to an instance’s additive array methods. Processing begins when you call start().

In the example below we have two queues, each with 20 jobs that take 500ms each. First queue fires all of them at the same time. Second queue fires two at a time.

var queue = require('queue');

function populateQueue(q) {
  for (var i = 0; i < 20; i++) {
    (function(index) {
      q.push(function(done) {
        console.log('done', index);
        setTimeout(done, 500);
      });
    })(i);
  }
}

var q1 = queue();
var q2 = queue({concurrency: 2});

populateQueue(q1);
populateQueue(q2);

q1.start();
q2.start();

What Else?

Checkout the runnable example and github example repository. Are you trying to limit your concurent load? Would love to hear why!