diff options
Diffstat (limited to 'lib/waterfall.js')
-rw-r--r-- | lib/waterfall.js | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/lib/waterfall.js b/lib/waterfall.js index 24befac..092f3ac 100644 --- a/lib/waterfall.js +++ b/lib/waterfall.js @@ -1,7 +1,7 @@ import isArray from 'lodash/isArray'; import noop from 'lodash/noop'; import once from './internal/once'; -import rest from './internal/rest'; +import slice from './internal/slice'; import onlyOnce from './internal/onlyOnce'; import wrapAsync from './internal/wrapAsync'; @@ -70,22 +70,17 @@ export default function(tasks, callback) { var taskIndex = 0; function nextTask(args) { - if (taskIndex === tasks.length) { - return callback.apply(null, [null].concat(args)); - } - - var taskCallback = onlyOnce(rest(function(err, args) { - if (err) { - return callback.apply(null, [err].concat(args)); - } - nextTask(args); - })); - - args.push(taskCallback); - var task = wrapAsync(tasks[taskIndex++]); + args.push(onlyOnce(next)); task.apply(null, args); } + function next(err/*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask(slice(arguments, 1)); + } + nextTask([]); } |