node package manager

fastseries

fastseries

npm version Build Status Coverage Status Dependency Status

Zero-overhead series function call for node.js. Also supports each and map!

Benchmark for doing 3 calls setImmediate 1 million times:

  • non-reusable setImmediate: 3887ms
  • async.series: 5981ms
  • async.eachSeries: 5087ms
  • async.mapSeries: 5540ms
  • neoAsync.series: 4338ms
  • neoAsync.eachSeries: 4195ms
  • neoAsync.mapSeries: 4237ms
  • tiny-each-async: 4575ms
  • fastseries with results: 4096ms
  • fastseries without results: 4063ms
  • fastseries map: 4032ms
  • fastseries each: 4168ms

These benchmarks where taken via bench.js on node 4.2.2, on a MacBook Pro Retina 2014.

If you need zero-overhead parallel function call, check out fastparallel.

js-standard-style

Example for series call

var series = require('fastseries')({
  // this is a function that will be called 
  // when a series completes 
  released: completed,
 
  // if you want the results, then here you are 
  results: true
})
 
series(
  {}, // what will be this in the functions 
  [something, something, something], // functions to call 
  42, // the first argument of the functions 
  done // the function to be called when the series ends 
)
 
function late (arg, cb) {
  console.log('finishing', arg)
  cb(null, 'myresult-' + arg)
}
 
function something (arg, cb) {
  setTimeout(late, 1000, arg, cb)
}
 
function done (err, results) {
  console.log('series completed, results:', results)
}
 
function completed () {
  console.log('series completed!')
}

Example for each and map calls

var series = require('fastseries')({
  // this is a function that will be called 
  // when a series completes 
  released: completed,
 
  // if you want the results, then here you are 
  // passing false disables map 
  results: true
})
 
series(
  {}, // what will be this in the functions 
  something, // functions to call 
  [1, 2, 3], // the first argument of the functions 
  done // the function to be called when the series ends 
)
 
function late (arg, cb) {
  console.log('finishing', arg)
  cb(null, 'myresult-' + arg)
}
 
function something (arg, cb) {
  setTimeout(late, 1000, arg, cb)
}
 
function done (err, results) {
  console.log('series completed, results:', results)
}
 
function completed () {
  console.log('series completed!')
}
 

Caveats

The done function will be called only once, even if more than one error happen.

This library works by caching the latest used function, so that running a new series does not cause any memory allocations.

License

ISC