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