Skip to content

Commit

Permalink
redefined each in terms of eachOf
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Early committed May 31, 2015
1 parent 8d55ac6 commit acf0ccb
Showing 1 changed file with 19 additions and 47 deletions.
66 changes: 19 additions & 47 deletions lib/async.js
Expand Up @@ -107,6 +107,13 @@
return keys;
};

function _iteratorKeys(coll) {
return _isArrayLike(coll) ?
// just plain _keys wont work with sparse arrays
_map(coll, function (_, index) { return index; }) :
_keys(coll);
}

function _baseSlice(arr, start) {
start = start || 0;
var index = -1;
Expand All @@ -124,6 +131,12 @@
return result;
}

function _withoutIndex(iterator) {
return function (value, index, callback) {
return iterator(value, callback);
};
}

//// exported async module functions ////

//// nextTick implementation with browser-compatible fallback ////
Expand Down Expand Up @@ -164,59 +177,18 @@

async.forEach =
async.each = function (arr, iterator, callback) {
callback = callback || noop;
if (!arr.length) {
return callback(null);
}
var completed = 0;
_arrayEach(arr, function (x) {
iterator(x, only_once(done) );
});
function done(err) {
if (err) {
callback(err);
callback = noop;
}
else {
completed += 1;
if (completed >= arr.length) {
callback(null);
}
}
}
return async.eachOf(arr, _withoutIndex(iterator), callback);
};

async.forEachSeries =
async.eachSeries = function (arr, iterator, callback) {
callback = callback || noop;
if (!arr.length) {
return callback(null);
}
var completed = 0;
function iterate() {
iterator(arr[completed], function (err) {
if (err) {
callback(err);
callback = noop;
}
else {
completed += 1;
if (completed >= arr.length) {
callback(null);
}
else {
iterate();
}
}
});
}
iterate();
return async.eachOfSeries(arr, _withoutIndex(iterator), callback);
};


async.forEachLimit =
async.eachLimit = function (arr, limit, iterator, callback) {
var fn = _eachLimit(limit)(arr, iterator, callback);
var fn = _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback);
};

function _eachLimit(limit) {
Expand Down Expand Up @@ -271,7 +243,7 @@
if (!size) {
return callback(null);
}
_forEachOf(object, function (value, key) {
_each(object, function (value, key) {
iterator(object[key], key, only_once(done));
});
function done(err) {
Expand All @@ -291,7 +263,7 @@
async.forEachOfSeries =
async.eachOfSeries = function (obj, iterator, callback) {
callback = callback || noop;
var keys = _keys(obj);
var keys = _iteratorKeys(obj);
var size = keys.length;
if (!size) {
return callback();
Expand Down Expand Up @@ -336,7 +308,7 @@

return function (obj, iterator, callback) {
callback = callback || noop;
var keys = _keys(obj);
var keys = _iteratorKeys(obj);
var size = keys.length;
if (!size || limit <= 0) {
return callback(null);
Expand Down

0 comments on commit acf0ccb

Please sign in to comment.