Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including async-reduce with all npm packages installed. Try it out:

var asyncReduce = require("async-reduce")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

async-reduce v0.0.1

#async-reduce

reduce function for async reductions on arrays.

##Examples

var reduce = require('async-reduce')

function sum(a, b, cb) {
  setTimeout(function() {
    cb(null, a + b)
  })
}

reduce([1, 2, 3], 1, sum, function(err, result) {
  result.should.equal(7)
})

Concurrent reductions are also supported

var reduce = require('async-reduce').concurrent(2, 0, function(a, b) {
  return a + b
})

reduce([1, 2, 3], 1, sum, function(err, result) {
  result.should.equal(7) // still the same result
})

During such reduction the given array is splitted into several chunks with total chunks number equal to concurrency level (it is the first arg to .concurrent()). That chunks are reduced in parallel. That means that we need a combine function to assembel results from that independent reductions (third arg). We also need some sort of unit value to seed our reductions (second arg). But we can omit unit and combine if we only interested in side effects:

var reduce = require('async-reduce').concurrent(5)
var items = []

reduce([1, 2, 3], null, function(_, item, cb) {
  items.push(item)
  cb()
}, function(err) {
  items.should.include(1)
  items.should.include(2)
  items.should.include(3)
})

This lib takes care about sync callback calls. They do not cause stack overflows.

##Installation

via component

component install eldargab/async-reduce

via npm

npm install async-reduce

##License

MIT

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free