UNPKG

@nathanfaucett/parallel

Version:

parallel for the browser and node.js

34 lines (27 loc) 840 B
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); }); }); }; }