JSFiddle - React, Tailwind, and code Playground

JavaScript

function encadear() {
    var cadeia = [].slice.call(arguments);
    return function(dadoInicial, end) {
	var fns = cadeia.slice();
        function exec(err, data) {
            if (err) return end(err);
            var next = fns.pop();
            if (!next) return end(null, data);
            next(data, exec);
        }
        exec(null, dadoInicial);
    }
}

function add1(n, callback) {
    setTimeout(function() {
        callback(null, n + 1);
    }, 10);
}

function mul3(n, callback) {
    setTimeout(function() {
        callback(null, n * 3);
    }, 10);
}

var add1mul3 = encadear(mul3, add1);
add1mul3(4, function(err, result) {
    console.log(err, result); // 15
});