Skip to content

Commit

Permalink
simplified/optimized async.parallel()
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Early committed May 31, 2015
1 parent e32c48c commit be0b6af
Showing 1 changed file with 14 additions and 72 deletions.
86 changes: 14 additions & 72 deletions lib/async.js
Expand Up @@ -191,50 +191,6 @@
return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback);
};

function _eachLimit(limit) {

return function (arr, iterator, callback) {
callback = callback || noop;
if (!arr.length || limit <= 0) {
return callback(null);
}
var completed = 0;
var started = 0;
var running = 0;
var errored = false;

(function replenish () {
if (completed >= arr.length) {
return callback(null);
}

while (running < limit && started < arr.length && !errored) {
started += 1;
running += 1;
iterator(arr[started - 1], function (err) {
if (err) {
callback(err);
errored = true;
callback = noop;
}
else {
completed += 1;
running -= 1;
if (completed >= arr.length) {
callback(null);
}
else {
replenish();
}
}
});
}
})();
};
}



async.forEachOf =
async.eachOf = function (object, iterator, callback) {
callback = callback || noop;
Expand Down Expand Up @@ -700,42 +656,28 @@

function _parallel(eachfn, tasks, callback) {
callback = callback || noop;
if (_isArray(tasks)) {
eachfn.map(tasks, function (fn, callback) {
if (fn) {
fn(function (err) {
var args = _baseSlice(arguments, 1);
if (args.length <= 1) {
args = args[0];
}
callback.call(null, err, args);
});
var results = _isArrayLike(tasks) ? [] : {};

eachfn(tasks, function (task, key, callback) {
task(function (err) {
var args = _baseSlice(arguments, 1);
if (args.length <= 1) {
args = args[0];
}
}, callback);
}
else {
var results = {};
eachfn.each(_keys(tasks), function (k, callback) {
tasks[k](function (err) {
var args = _baseSlice(arguments, 1);
if (args.length <= 1) {
args = args[0];
}
results[k] = args;
callback(err);
});
}, function (err) {
callback(err, results);
results[key] = args;
callback(err);
});
}
}, function (err) {
callback(err, results);
});
}

async.parallel = function (tasks, callback) {
_parallel({ map: async.map, each: async.each }, tasks, callback);
_parallel(async.eachOf, tasks, callback);
};

async.parallelLimit = function(tasks, limit, callback) {
_parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
_parallel(_eachOfLimit(limit), tasks, callback);
};

async.series = function (tasks, callback) {
Expand Down

0 comments on commit be0b6af

Please sign in to comment.