Reduce an array of values via an asynchronous function.

npm install asyncreduce
2 downloads in the last day
16 downloads in the last week
762 downloads in the last month

asyncreduce build status

testling badge

Reduce an array of values via an asynchronous function.

var fs = require('fs');
var path = require('path');
var asyncReduce = require('asyncreduce');

    [ '.gitignore', '.jshintrc', '.travis.yml', 'index.js', '' ]
  , {}
  , function size (acc, file, cb) {
      var p = path.join(__dirname, '..', file);

      fs.stat(p, function (err, stat) {
        if (err) return cb(err);

        acc[file] = stat.size;
        cb(null, acc);
  , function done (err, acc) {
      if (err) return console.error(err);
      console.log('sizes:\n', acc);
 { '.gitignore': 97,
  '.jshintrc': 249,
  '.travis.yml': 48,
  'index.js': 1534,
  '': 2160 }


  • super small library built on top of also quite small runnel
  • since runnel try/catches and bubbles errors and reports with detailed stack traces, so does asyncreduce


npm install asyncreduce

In the browser

With browserify

You are all good.

Without browserify

Two options:


function asyncReduce (items, seed, iterator, done)

 * Calls provided async iterator function with the accumulator and each item.
 * When all items have been iterated over calls done with a possible error or the final value of the accumulator.
 * @name exports
 * @function
 * @param items {Array} the items to be reduced
 * @param seed {T} the initial value that can be of any type and is passed along as the accumulator (acc) each time the iterator is called
 * @param iterator {Function} function (acc, item, callback) {} - the iterator called for each item
 * @param done {Function} function (err, acc) {} - called with final accumulated value or an error if one occurred



npm loves you