index.js 773 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. module.exports = function parallel(fns, context, callback) {
  2. if (!callback) {
  3. if (typeof context === 'function') {
  4. callback = context
  5. context = null
  6. } else {
  7. callback = noop
  8. }
  9. }
  10. var pending = fns && fns.length
  11. if (!pending) return callback(null, []);
  12. var finished = false
  13. var results = new Array(pending)
  14. fns.forEach(context ? function (fn, i) {
  15. fn.call(context, maybeDone(i))
  16. } : function (fn, i) {
  17. fn(maybeDone(i))
  18. })
  19. function maybeDone(i) {
  20. return function (err, result) {
  21. if (finished) return;
  22. if (err) {
  23. callback(err, results)
  24. finished = true
  25. return
  26. }
  27. results[i] = result
  28. if (!--pending) callback(null, results);
  29. }
  30. }
  31. }
  32. function noop() {}