https://github.com/Gozala/reducers
Tip revision: 291e0255e28ba6c015b69cc8556a287f9c873b9e authored by Irakli Gozalishvili on 25 October 2012, 06:36:51 UTC
Version 0.1.4
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