JSFiddle - React, Tailwind, and code Playground
by Ulric Wilfred
JavaScript
var __s = Array.prototype.slice;
function deferrable_as(ctx, f) {
return function() {
return (function(f, args) {
return function(callback) { return f.apply(ctx, args.concat([callback])); };
})(f, __s.call(arguments));
}
}
var fs = { 'a': 20,
'readFile': function(name, callback) {
setTimeout(function() {
var err = null;
if (name === 'not_exist') err = new Error('Not exist');
callback(err, name);
}, 2000);
return 'unneeded';
} };
var read_file = deferrable_as(fs, fs.readFile);
function successive(/*f...*/) {
var as = __s.call(arguments),
handle_err = as.slice(-1)[0];
as[0](function(err, res) {
if (err) { handle_err(err); return; };
document.write('<span>Executed: '+res+'</span><br/>');
successive.apply(null, as.slice(1));
});
}
successive(read_file('one'),
read_file('two'),
read_file('three'),
read_file('not_exist'),
read_file('four'),
function(e) { document.write('<span style="color:#f00">Error: '+e.message+'</span><br/>'); });