summaryrefslogtreecommitdiff
path: root/lib/waterfall.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/waterfall.js')
-rw-r--r--lib/waterfall.js23
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([]);
}