waterfall.js 666 B

123456789101112131415161718192021222324252627
  1. var noop = require('./noop');
  2. var nextTick = require('./nextTick');
  3. var restArgs = require('./restArgs');
  4. exports = function(tasks, cb) {
  5. cb = cb || noop;
  6. var current = 0;
  7. var taskCb = restArgs(function(err, args) {
  8. if (++current >= tasks.length || err) {
  9. args.unshift(err);
  10. nextTick(function() {
  11. cb.apply(null, args);
  12. });
  13. } else {
  14. args.push(taskCb);
  15. tasks[current].apply(null, args);
  16. }
  17. });
  18. if (tasks.length) {
  19. tasks[0](taskCb);
  20. } else {
  21. nextTick(function() {
  22. cb();
  23. });
  24. }
  25. };
  26. module.exports = exports;