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);
var fns = [5, 4, 2].map(function(nr) {
return new Promise(function(resolve, reject) {
add1mul3(nr, function(err, res) {
resolve(res);
})
});
});
Promise.all(fns).then(function(result) {
console.log(result); // [18, 15, 9]
});