Skip to content

Commit

Permalink
Merge pull request #847 from charlierudolph/cr-useLimit
Browse files Browse the repository at this point in the history
implement <name> and <name>Series with <name>Limit
  • Loading branch information
aearly committed Mar 5, 2016
2 parents 1949089 + acd656d commit f38483c
Show file tree
Hide file tree
Showing 17 changed files with 56 additions and 122 deletions.
8 changes: 3 additions & 5 deletions lib/each.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import eachOf from './eachOf';
import withoutIndex from './internal/withoutIndex';
import eachLimit from './eachLimit';
import doLimit from './internal/doLimit';

export default function each(arr, iterator, cb) {
return eachOf(arr, withoutIndex(iterator), cb);
}
export default doLimit(eachLimit, Infinity);
34 changes: 3 additions & 31 deletions lib/eachOf.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,6 @@
'use strict';

import once from 'lodash/once';
import noop from 'lodash/noop';
import eachOfLimit from './eachOfLimit';
import doLimit from './internal/doLimit';

import keyIterator from './internal/keyIterator';
import onlyOnce from './internal/onlyOnce';

export default function eachOf(object, iterator, callback) {
callback = once(callback || noop);
object = object || [];

var iter = keyIterator(object);
var key, completed = 0;

while ((key = iter()) != null) {
completed += 1;
iterator(object[key], key, onlyOnce(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);
}
}
}
export default doLimit(eachOfLimit, Infinity);
40 changes: 3 additions & 37 deletions lib/eachOfSeries.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,6 @@
'use strict';

import once from 'lodash/once';
import noop from 'lodash/noop';
import eachOfLimit from './eachOfLimit';
import doLimit from './internal/doLimit';

import keyIterator from './internal/keyIterator';
import onlyOnce from './internal/onlyOnce';
import setImmediate from './setImmediate';

export default function eachOfSeries(obj, iterator, callback) {
callback = once(callback || noop);
obj = obj || [];
var nextKey = keyIterator(obj);
var key = nextKey();

function iterate() {
var sync = true;
if (key === null) {
return callback(null);
}
iterator(obj[key], key, onlyOnce(function(err) {
if (err) {
callback(err);
} else {
key = nextKey();
if (key === null) {
return callback(null);
} else {
if (sync) {
setImmediate(iterate);
} else {
iterate();
}
}
}
}));
sync = false;
}
iterate();
}
export default doLimit(eachOfLimit, 1);
8 changes: 3 additions & 5 deletions lib/eachSeries.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import eachOfSeries from './eachOfSeries';
import withoutIndex from './internal/withoutIndex';
import eachLimit from './eachLimit';
import doLimit from './internal/doLimit';

export default function eachSeries(arr, iterator, cb) {
return eachOfSeries(arr, withoutIndex(iterator), cb);
}
export default doLimit(eachLimit, 1);
7 changes: 3 additions & 4 deletions lib/every.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use strict';

import createTester from './internal/createTester';
import eachOf from './eachOf';
import notId from './internal/notId';
import everyLimit from './everyLimit';
import doLimit from './internal/doLimit';

export default createTester(eachOf, notId, notId);
export default doLimit(everyLimit, Infinity);
6 changes: 3 additions & 3 deletions lib/filter.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import filter from './internal/filter';
import doParallel from './internal/doParallel';
import filterLimit from './filterLimit';
import doLimit from './internal/doLimit';

export default doParallel(filter);
export default doLimit(filterLimit, Infinity);
6 changes: 3 additions & 3 deletions lib/filterSeries.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import filter from './internal/filter';
import doSeries from './internal/doSeries';
import filterLimit from './filterLimit';
import doLimit from './internal/doLimit';

export default doSeries(filter);
export default doLimit(filterLimit, 1);
7 changes: 7 additions & 0 deletions lib/internal/doLimit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

export default function doLimit(fn, limit) {
return function (iterable, iterator, callback) {
return fn(iterable, limit, iterator, callback);
};
}
6 changes: 3 additions & 3 deletions lib/map.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import doParallel from './internal/doParallel';
import map from './internal/map';
import mapLimit from './mapLimit';
import doLimit from './internal/doLimit';

export default doParallel(map);
export default doLimit(mapLimit, Infinity);
6 changes: 3 additions & 3 deletions lib/mapSeries.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import map from './internal/map';
import doSeries from './internal/doSeries';
import mapLimit from './mapLimit';
import doLimit from './internal/doLimit';

export default doSeries(map);
export default doLimit(mapLimit, 1);
8 changes: 3 additions & 5 deletions lib/parallel.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import _parallel from './internal/parallel';
import eachOf from './eachOf';
import parallelLimit from './parallelLimit';
import doLimit from './internal/doLimit';

export default function parallel(tasks, cb) {
return _parallel(eachOf, tasks, cb);
}
export default doLimit(parallelLimit, Infinity);
6 changes: 3 additions & 3 deletions lib/reject.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import reject from './internal/reject';
import doParallel from './internal/doParallel';
import rejectLimit from './rejectLimit';
import doLimit from './internal/doLimit';

export default doParallel(reject);
export default doLimit(rejectLimit, Infinity);
6 changes: 3 additions & 3 deletions lib/rejectSeries.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

import reject from './internal/reject';
import doSeries from './internal/doSeries';
import rejectLimit from './rejectLimit';
import doLimit from './internal/doLimit';

export default doSeries(reject);
export default doLimit(rejectLimit, 1);
8 changes: 3 additions & 5 deletions lib/some.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import identity from 'lodash/identity';
import someLimit from './someLimit';
import doLimit from './internal/doLimit';

import createTester from './internal/createTester';
import eachOf from './eachOf';

export default createTester(eachOf, Boolean, identity);
export default doLimit(someLimit, Infinity);
8 changes: 3 additions & 5 deletions lib/times.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import map from './map';
import range from 'lodash/_baseRange';
import timesLimit from './timesLimit';
import doLimit from './internal/doLimit';

export default function (count, iterator, callback) {
map(range(0, count, 1), iterator, callback);
}
export default doLimit(timesLimit, Infinity);
8 changes: 3 additions & 5 deletions lib/timesSeries.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict';

import mapSeries from './mapSeries';
import range from 'lodash/_baseRange';
import timesLimit from './timesLimit';
import doLimit from './internal/doLimit';

export default function (count, iterator, callback) {
mapSeries(range(0, count, 1), iterator, callback);
}
export default doLimit(timesLimit, 1);
6 changes: 4 additions & 2 deletions test/test-async.js
Original file line number Diff line number Diff line change
Expand Up @@ -998,9 +998,10 @@ exports['each extra callback'] = function(test){
var count = 0;
async.each([1,3,2], function(val, callback) {
count++;
var done = count == 3;
callback();
test.throws(callback);
if (count == 3) {
if (done) {
test.done();
}
});
Expand Down Expand Up @@ -1521,8 +1522,9 @@ exports['map'] = {
var r = [];
async.map(a, function(x, callback){
r.push(x);
var done = r.length == a.length;
callback(null);
if (r.length >= a.length) {
if (done) {
test.same(r, a);
test.done();
}
Expand Down

0 comments on commit f38483c

Please sign in to comment.