UNPKG

@nathanfaucett/parallel

Version:

parallel for the browser and node.js

38 lines (31 loc) 1.02 kB
var keys = require("@nathanfaucett/keys"), once = require("@nathanfaucett/once"), asyncDone = require("@nathanfaucett/async_done"), objectValues = require("@nathanfaucett/values").objectValues, arrayForEach = require("@nathanfaucett/array-for_each"), throwIfNotFunction = require("./throwIfNotFunction"); module.exports = fromObject; function fromObject(tasks) { var taskNames = keys(tasks), taskValues = objectValues(tasks, taskNames), taskLength = taskValues.length; arrayForEach(taskValues, throwIfNotFunction); return function runObject(callback) { var onceCallback = once(callback), results = {}, count = taskLength; function onResult(error, key, result) { results[key] = result; if (error) { onceCallback(error, results); } else if (--count === 0) { onceCallback(undefined, results); } } arrayForEach(taskValues, function each(task, index) { asyncDone(task, function onAsyncDone(error, result) { onResult(error, taskNames[index], result); }); }); }; }