parallel.js 647 B

1234567891011121314151617181920212223242526
  1. var noop = require('./noop');
  2. var each = require('./each');
  3. var nextTick = require('./nextTick');
  4. exports = function(tasks, cb) {
  5. cb = cb || noop;
  6. var results = [];
  7. var pending = tasks.length;
  8. if (!pending) return done(null);
  9. each(tasks, function(task, i) {
  10. task(function(err, result) {
  11. taskCb(i, err, result);
  12. });
  13. });
  14. function taskCb(i, err, result) {
  15. results[i] = result;
  16. if (--pending === 0 || err) done(err);
  17. }
  18. function done(err) {
  19. nextTick(function() {
  20. cb(err, results);
  21. cb = noop;
  22. });
  23. }
  24. };
  25. module.exports = exports;