Skip to content

Function for async reductions on arrays with concurrency support as well

Notifications You must be signed in to change notification settings

eldargab/async-reduce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#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 split into several chunks with the total number of chunks equal to the concurrency level (it is the first arg to .concurrent()). Those chunks are reduced in parallel. That means that we need a combine function to assemble the results from those 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 are 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 of 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

About

Function for async reductions on arrays with concurrency support as well

Resources

Stars

Watchers

Forks

Packages

No packages published