1.0.1 • Published 8 years ago

pull-reduction v1.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
8 years ago

On an array:

var assert = require('assert')

assert([1, 2, 3, 4].reduce(function (a, b) { return a + b }) === 10)

In a pull-stream pipeline:

var reduction = require('pull-reduction')
var pull = require('pull-stream')

pull(
  pull.values([1, 2, 3, 4]),
  reduction(
    function add (reduced, current, callback) {
      callback(null, reduced + current)
    },
    function (error, reduced) {
      assert(error === null, 'no stream error')
      assert(reduced === 10, 'reduces to sum')
    }
  )
)

If both the source and the reduction call back synchronously, pull-reduction will loop, rather than recurse, to keep the stack short.

On an array:

assert(
  [0, 0, 0, 0, 0].reduce(function (a, b, index) {
    return a + index
  }, 100) === 110
)

In a pull-stream pipeline:

pull(
  pull.values([0, 0, 0, 0, 0]),
  reduction(
    // If the reducing function takes four arguments, it receives the
    // current index, as well.
    function add (reduced, current, index, callback) {
      callback(null, reduced + index)
    },
    // With three arguments, `reduction` sets an initial value.
    100,
    function (error, reduced) {
      assert(error === null, 'no stream error')
      assert(reduced === 110, 'reduces to sum of indices + initial')
    }
  )
)

Reductions can fail with errors:

pull(
  pull.values([1, 2, 3, 4, 5]),
  reduction(
    function fail (reduced, current, callback) {
      callback(new Error('reduction error'))
    },
    function (error, reduced) {
      assert(error.message === 'reduction error', 'aborts with error')
    }
  )
)