index.js 985 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
  2. module.exports = runParallel
  3. function runParallel (tasks, cb) {
  4. var results, pending, keys
  5. var isSync = true
  6. if (Array.isArray(tasks)) {
  7. results = []
  8. pending = tasks.length
  9. } else {
  10. keys = Object.keys(tasks)
  11. results = {}
  12. pending = keys.length
  13. }
  14. function done (err) {
  15. function end () {
  16. if (cb) cb(err, results)
  17. cb = null
  18. }
  19. if (isSync) process.nextTick(end)
  20. else end()
  21. }
  22. function each (i, err, result) {
  23. results[i] = result
  24. if (--pending === 0 || err) {
  25. done(err)
  26. }
  27. }
  28. if (!pending) {
  29. // empty
  30. done(null)
  31. } else if (keys) {
  32. // object
  33. keys.forEach(function (key) {
  34. tasks[key](function (err, result) { each(key, err, result) })
  35. })
  36. } else {
  37. // array
  38. tasks.forEach(function (task, i) {
  39. task(function (err, result) { each(i, err, result) })
  40. })
  41. }
  42. isSync = false
  43. }