summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Yeates <yeatesgraeme@gmail.com>2015-09-07 12:52:15 -0400
committerGraeme Yeates <yeatesgraeme@gmail.com>2015-09-07 12:52:15 -0400
commit9d70ffa4ce65a6f10512ee8a3ebd30fda10f32c6 (patch)
tree844b44c12cd9838255966252bde7fde9f135c615
parentcc9d3d5f7380b731d4ece7f3a70adc5e74cadeec (diff)
downloadasync-eachOfLimitImpl.tar.gz
implement eachof via eachOfLimiteachOfLimitImpl
-rw-r--r--lib/async.js34
1 files changed, 4 insertions, 30 deletions
diff --git a/lib/async.js b/lib/async.js
index 4524a3c..6dd809b 100644
--- a/lib/async.js
+++ b/lib/async.js
@@ -221,31 +221,7 @@
};
async.forEachOf =
- async.eachOf = function (object, iterator, callback) {
- callback = _once(callback || noop);
-
- var iter = _keyIterator(object);
- var key, completed = 0;
-
- while ((key = iter()) != null) {
- completed += 1;
- iterator(object[key], key, only_once(done));
- }
-
- if (completed === 0) callback(null);
-
- function done(err) {
- completed--;
- if (err) {
- callback(err);
- }
- // Check key is null in case iterator isn't exhausted
- // and done resolved synchronously.
- else if (key === null && completed <= 0) {
- callback(null);
- }
- }
- };
+ async.eachOf = _eachOfLimit(Infinity);
async.forEachOfSeries =
async.eachOfSeries = function (obj, iterator, callback) {
@@ -288,7 +264,6 @@
};
function _eachOfLimit(limit) {
-
return function (obj, iterator, callback) {
callback = _once(callback || noop);
@@ -296,19 +271,18 @@
if (limit <= 0) {
return callback(null);
}
- var done = false;
+ var key;
var running = 0;
var errored = false;
(function replenish () {
- if (done && running <= 0) {
+ if (key === null && running <= 0) {
return callback(null);
}
while (running < limit && !errored) {
- var key = nextKey();
+ key = nextKey();
if (key === null) {
- done = true;
if (running <= 0) {
callback(null);
}