https://github.com/Gozala/reducers
Raw File
Tip revision: 291e0255e28ba6c015b69cc8556a287f9c873b9e authored by Irakli Gozalishvili on 25 October 2012, 06:36:51 UTC
Version 0.1.4
Tip revision: 291e025
reduce.js
"use strict";

var deliver = require("eventual/deliver")
var defer = require("eventual/defer")
var when = require("eventual/when")
var accumulate = require("./accumulate")
var end = require("./end")
var error = require("./error")

function reduce(source, f, state) {
  var promise = defer()
  accumulate(source, function(value) {
    if (value && value.isBoxed) {
      if (value.is === end) deliver(promise, state)
      if (value.is === error) deliver(promise, value.value)
      return value
    } else {
      state = f(state, value)
      return state
    }
  }, state)
  return when(promise)
}

module.exports = reduce
back to top