waterfall - -, ( ):
function withTiming(fn, name) {
if (typeof name == "number") name = "step"+name;
return function() {
var start = Date.now()
var lastIndex = arguments.length-1;
var cb = arguments[lastIndex];
arguments[lastIndex] = function() {
console.log(name+": "+(start-Date.now())+"ms");
cb.apply(this, arguments);
};
return fn.apply(this, arguments);
};
}
async.js :
async.waterfall([
f=>{
console.log('step1');
f();
},
f=>{
console.log('step2');
f();
},
f=>{
console.log('step3');
f();
},
].map(withTiming), ()=>{
console.log('done');
})