Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Compose functions together
Branch: master

Merge pull request #2 from jcolebrand/master

updates to wording/added definition
latest commit d19c2c3fbe
@Raynos authored

Composite build status

Compose functions together

Function composition is a mathematical concept where a function is applied to the results of another (inner) function. In algebra this is often expressed as "g of f" when describing two functions "f" and "g", where g is applied to the results of f. The notation is typically: (g ° f)(x) or alternately g(f(x)).


var compose = require("composite"),
    composeAsync = compose.async

// note the last argument gets called first just like the mathematical 
// composition operator
var composed = compose(function (b) {
    return b * 2
}, function (a) {
    return a * 3

composed(3) // 18

var composedAsync = composeAsync(function second(err, b, outer) {
    outer(null, b * 2)
}, function first(a, second) {
    second(null, a * 3)

composedAsync(3, function outer(err, result) {
    // error === null, result === 18

Example abusing this

var composed = composeAsync(parseFile, stringifyFile, fs.readFile){}, "foo.js", function (err, data) {
    // data = someJSONObject

// If you specify a this value, then that value will be used as this for
// all the functionsan empty object is given. This is useful to store state
function stringifyFile(err, data, cb) {
    if (err) {
        return cb(err)
    } = data.toString()

function parseFile(err, cb) {
    cb(err, && JSON.parse(

Example Working with errors

composeAsync(function (err, data, cb) {
    // note how the callback is still the third parameter.
    // This is because asyncCompose ensures cb is always the
    // last parameter
    if (err) {
        return cb(err)
}, function (cb) {
    cb(new Error("oops"))
})(function (err) {
    // we got the oops err


npm install composite


make test


  • Raynos

MIT Licenced

Something went wrong with that request. Please try again.