waterfall.js 484 B

12345678910111213141516171819202122
  1. 'use strict';
  2. var atoa = require('atoa');
  3. var once = require('./once');
  4. var errored = require('./errored');
  5. var debounce = require('./debounce');
  6. module.exports = function waterfall (steps, done) {
  7. var d = once(done);
  8. function next () {
  9. var args = atoa(arguments);
  10. var step = steps.shift();
  11. if (step) {
  12. if (errored(args, d)) { return; }
  13. args.push(once(next));
  14. debounce(step, args);
  15. } else {
  16. debounce(d, arguments);
  17. }
  18. }
  19. next();
  20. };