Home

Awesome

Chain.js

Sequencing function calls in JavaScript.

Examples

#1 (simple)

Chain()(
    function(res, chain) {
        console.log("A"); chain.next(10);
    },
    function(res, chain) {
        console.log("B", res); chain.next(res+1);
    },
    function(res, chain) {
        console.log("C", res); chain.next();
    }
);

Output:

A
B 10
C 11

#2 (passing function as array)

var A = function(str, callback) {
    console.log("Hello " + str + "!");
    callback();
}
var B = function(str1, str2, callback) {
    console.log("How " + str1 + " " + str2 + "?");
    callback();
}
Chain()(
    [A, "world"],
    [B, "are", "you"],
    function(res, chain) {
        chain.next();
    }
);

Output:

Hello world!
How are you?

#3 (#1 + #2 + listening for chain ending)

var chainFinished = function(res, chain) {
    console.log("End", res);
}
var customFunc = function(arg1, arg2, callback) {
    console.log("customFunc", arg1, arg2);
    callback("result(customFunc)");
}

Chain()("done", chainFinished)(
    function(res, chain) {
        console.log("A", res);
        chain.next("result(A)");
    },
    [customFunc, "Hello", "World"],
    function(res, chain) {
        console.log("B", res);
        chain.next("result(B)");
    }
);

Output:

A null
customFunc Hello World 
B result(customFunc)
End result(B)

#4 (error reporting)

var operationA = function(res, chain) {
    chain.error({message: "Error message from operation A"}).next();
}
var operationB = function(res, chain) {
    chain.error({message: "Error message from operation B"}).next();   
}
Chain()("done", function(res, chain) {
    if(errors = chain.error()) {
        console.log("Yes, there are some errors", errors);
    }
})(
    operationA,
    operationB
);

Output:

Yes, there are some errors
[Object, Object]