UNPKG

nhz.lib

Version:
69 lines (66 loc) 1.55 kB
/* async.parallel(args = {}) */ var slice = [].slice; module.exports = function() { var count, done, errors, finish, result, results, start, started, tasks, timeout, timeoutId; tasks = 1 <= arguments.length ? slice.call(arguments, 0) : []; if (tasks[0] instanceof Array) { tasks = tasks[0]; } errors = []; results = []; timeout = 5000; timeoutId = null; done = false; started = false; count = tasks.length; finish = function() { done = true; return clearTimeout(timeoutId); }; start = function(callback) { var fn, i, id, len, reset, task; reset = function() { finish(); return callback(new Error("Timeout"), results); }; timeoutId = setTimeout(reset, timeout); started = true; fn = function(id) { return task(function(err, res) { if (!done) { count--; if (err) { errors[id] = err; } if (res) { results[id] = res; } if (count < 1) { if (errors.length === 0) { errors = null; } finish(); return callback(errors, results); } } }); }; for (id = i = 0, len = tasks.length; i < len; id = ++i) { task = tasks[id]; fn(id); } return timeoutId; }; result = { timeout: function(value) { timeout = value; return result; }, then: function(callback) { if (!started) { return start(callback); } } }; return result; };