run-waterfall
Version:
Run an array of functions in series, each passing its results to the next function (waterfall)
34 lines (28 loc) • 720 B
JavaScript
/*! run-waterfall. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
module.exports = runWaterfall
function runWaterfall (tasks, cb) {
var current = 0
var isSync = true
function done (err, args) {
function end () {
args = args ? [].concat(err, args) : [err]
if (cb) cb.apply(undefined, args)
}
if (isSync) process.nextTick(end)
else end()
}
function each (err) {
var args = Array.prototype.slice.call(arguments, 1)
if (++current >= tasks.length || err) {
done(err, args)
} else {
tasks[current].apply(undefined, [].concat(args, each))
}
}
if (tasks.length) {
tasks[0](each)
} else {
done(null)
}
isSync = false
}