Spaces:
Running
Running
| /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */ | |
| module.exports = runParallel | |
| const queueMicrotask = require('queue-microtask') | |
| function runParallel (tasks, cb) { | |
| let results, pending, keys | |
| let isSync = true | |
| if (Array.isArray(tasks)) { | |
| results = [] | |
| pending = tasks.length | |
| } else { | |
| keys = Object.keys(tasks) | |
| results = {} | |
| pending = keys.length | |
| } | |
| function done (err) { | |
| function end () { | |
| if (cb) cb(err, results) | |
| cb = null | |
| } | |
| if (isSync) queueMicrotask(end) | |
| else end() | |
| } | |
| function each (i, err, result) { | |
| results[i] = result | |
| if (--pending === 0 || err) { | |
| done(err) | |
| } | |
| } | |
| if (!pending) { | |
| // empty | |
| done(null) | |
| } else if (keys) { | |
| // object | |
| keys.forEach(function (key) { | |
| tasks[key](function (err, result) { each(key, err, result) }) | |
| }) | |
| } else { | |
| // array | |
| tasks.forEach(function (task, i) { | |
| task(function (err, result) { each(i, err, result) }) | |
| }) | |
| } | |
| isSync = false | |
| } | |