41 lines
773 B
JavaScript
41 lines
773 B
JavaScript
module.exports = function parallel(fns, context, callback) {
|
|
if (!callback) {
|
|
if (typeof context === 'function') {
|
|
callback = context
|
|
context = null
|
|
} else {
|
|
callback = noop
|
|
}
|
|
}
|
|
|
|
var pending = fns && fns.length
|
|
if (!pending) return callback(null, []);
|
|
|
|
var finished = false
|
|
var results = new Array(pending)
|
|
|
|
fns.forEach(context ? function (fn, i) {
|
|
fn.call(context, maybeDone(i))
|
|
} : function (fn, i) {
|
|
fn(maybeDone(i))
|
|
})
|
|
|
|
function maybeDone(i) {
|
|
return function (err, result) {
|
|
if (finished) return;
|
|
|
|
if (err) {
|
|
callback(err, results)
|
|
finished = true
|
|
return
|
|
}
|
|
|
|
results[i] = result
|
|
|
|
if (!--pending) callback(null, results);
|
|
}
|
|
}
|
|
}
|
|
|
|
function noop() {}
|