@nathanfaucett/parallel
Version:
parallel for the browser and node.js
34 lines (27 loc) • 840 B
JavaScript
var once = require("@nathanfaucett/once"),
asyncDone = require("@nathanfaucett/async_done"),
arrayForEach = require("@nathanfaucett/array-for_each"),
throwIfNotFunction = require("./throwIfNotFunction");
module.exports = fromArray;
function fromArray(tasks) {
var taskLength = tasks.length;
arrayForEach(tasks, throwIfNotFunction);
return function runArray(callback) {
var onceCallback = once(callback),
results = new Array(taskLength),
count = taskLength;
function onResult(error, index, result) {
results[index] = result;
if (error) {
onceCallback(error, results);
} else if (--count === 0) {
onceCallback(undefined, results);
}
}
arrayForEach(tasks, function each(task, index) {
asyncDone(task, function onAsyncDone(error, result) {
onResult(error, index, result);
});
});
};
}