UNPKG

985 BJavaScriptView Raw
1/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
2module.exports = runParallel
3
4function 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}