Like forEachAsync and Join had a baby: sequences out n batches of async functions rather than all at once. Part of FuturesJS (Browser, Node.js, Bower, Pakmanager)

npm install lateral
19 downloads in the last week
31 downloads in the last month


Basically a forEachAsync that allows n async calls at once.

Another way to think of it is as a thread pool for JavaScript.

Say you have 500 http requests that you want to get done 10 at a time in batches of 400, 50, and 50 and you want to know when each batch (and all batches) have finished... lateral is your guy!

Node.js Installation

Node.JS (Server):

npm install lateral

Browser Installation

You can install from bower:

bower install lateral

Or download the raw file from


Or build with pakmanager:

pakmanager build lateral


;(function () {
  'use strict';

  var Lateral = window.Lateral || require('lateral').Lateral
    , maxCallsAtOnce = 4 // default
    , lateral

  function onEach(complete, item, i) {
    setTimeout(function () {
    }, 500);

  lateral = Lateral.create(onEach, maxCallsAtOnce);

  lateral.add(['a', 'b', 'c', 'd']).then(function () {
    console.log('first batch done');
  lateral.add(['d', 'e', 'f', 'g']).then(function () {
    console.log('second batch done');

  lateral.then(function () {
    console.log('did all the things');


  • lateral = Lateral.create(fn, n)
    • create a Lateral that will execute fn on each item to do at most n things at once
  • lateral.add(arr).then(cb) - adds arr to be handled by fn and cb is called when all in arr are handled
  • lateral.then(callback)
    • Fires callback when all items in added arrays have been handled


The code is a little hairy and could use some cleaning.

npm loves you