nhz.lib
Version:
NHZ Library
69 lines (66 loc) • 1.55 kB
JavaScript
/* 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;
};