Skip to content

Commit

Permalink
Merge pull request #1360 from hargasinski/createrTester-use-doLimit
Browse files Browse the repository at this point in the history
standardize detect, every, and some implementations to use doParallel & equivalents
  • Loading branch information
Hubert Argasinski authored Jan 31, 2017
2 parents d3f583a + c7592c9 commit 5188c84
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 48 deletions.
4 changes: 2 additions & 2 deletions lib/detect.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import identity from 'lodash/identity';

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

/**
Expand Down Expand Up @@ -39,4 +39,4 @@ import findGetResult from './internal/findGetResult';
* // result now equals the first file in the list that exists
* });
*/
export default createTester(eachOf, identity, findGetResult);
export default doParallel(createTester(identity, findGetResult));
4 changes: 2 additions & 2 deletions lib/detectLimit.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import identity from 'lodash/identity';

import createTester from './internal/createTester';
import eachOfLimit from './eachOfLimit';
import doParallelLimit from './internal/doParallelLimit';
import findGetResult from './internal/findGetResult';

/**
Expand All @@ -26,4 +26,4 @@ import findGetResult from './internal/findGetResult';
* (iteratee) or the value `undefined` if none passed. Invoked with
* (err, result).
*/
export default createTester(eachOfLimit, identity, findGetResult);
export default doParallelLimit(createTester(identity, findGetResult));
9 changes: 3 additions & 6 deletions lib/detectSeries.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
import identity from 'lodash/identity';

import createTester from './internal/createTester';
import eachOfSeries from './eachOfSeries';
import findGetResult from './internal/findGetResult';
import detectLimit from './detectLimit';
import doLimit from './internal/doLimit';

/**
* The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.
Expand All @@ -24,4 +21,4 @@ import findGetResult from './internal/findGetResult';
* (iteratee) or the value `undefined` if none passed. Invoked with
* (err, result).
*/
export default createTester(eachOfSeries, identity, findGetResult);
export default doLimit(detectLimit, 1);
5 changes: 3 additions & 2 deletions lib/eachOf.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import isArrayLike from 'lodash/isArrayLike';

import breakLoop from './internal/breakLoop';
import eachOfLimit from './eachOfLimit';
import doLimit from './internal/doLimit';
import noop from 'lodash/noop';
Expand All @@ -16,10 +17,10 @@ function eachOfArrayLike(coll, iteratee, callback) {
callback(null);
}

function iteratorCallback(err) {
function iteratorCallback(err, value) {
if (err) {
callback(err);
} else if (++completed === length) {
} else if ((++completed === length) || value === breakLoop) {
callback(null);
}
}
Expand Down
4 changes: 2 additions & 2 deletions lib/every.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import createTester from './internal/createTester';
import eachOf from './eachOf';
import doParallel from './internal/doParallel';
import notId from './internal/notId';

/**
Expand Down Expand Up @@ -30,4 +30,4 @@ import notId from './internal/notId';
* // if result is true then every file exists
* });
*/
export default createTester(eachOf, notId, notId);
export default doParallel(createTester(notId, notId));
4 changes: 2 additions & 2 deletions lib/everyLimit.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import createTester from './internal/createTester';
import eachOfLimit from './eachOfLimit';
import doParallelLimit from './internal/doParallelLimit';
import notId from './internal/notId';

/**
Expand All @@ -22,4 +22,4 @@ import notId from './internal/notId';
* `iteratee` functions have finished. Result will be either `true` or `false`
* depending on the values of the async tests. Invoked with (err, result).
*/
export default createTester(eachOfLimit, notId, notId);
export default doParallelLimit(createTester(notId, notId));
48 changes: 20 additions & 28 deletions lib/internal/createTester.js
Original file line number Diff line number Diff line change
@@ -1,37 +1,29 @@
'use strict';
import noop from 'lodash/noop';
import breakLoop from './breakLoop';

export default function _createTester(eachfn, check, getResult) {
return function(arr, limit, iteratee, cb) {
function done() {
if (cb) {
cb(null, getResult(false));
}
}
function wrappedIteratee(x, _, callback) {
if (!cb) return callback();
iteratee(x, function (err, v) {
// Check cb as another iteratee may have resolved with a
// value or error since we started this iteratee
if (cb && (err || check(v))) {
if (err) cb(err);
else cb(err, getResult(true, x));
cb = iteratee = false;
callback(err, breakLoop);
export default function _createTester(check, getResult) {
return function(eachfn, arr, iteratee, cb) {
cb = cb || noop;
var testPassed = false;
var testResult;
eachfn(arr, function(value, _, callback) {
iteratee(value, function(err, result) {
if (err) {
callback(err);
} else if (check(result) && !testResult) {
testPassed = true;
testResult = getResult(true, value);
callback(null, breakLoop);
} else {
callback();
}
});
}
if (arguments.length > 3) {
cb = cb || noop;
eachfn(arr, limit, wrappedIteratee, done);
} else {
cb = iteratee;
cb = cb || noop;
iteratee = limit;
eachfn(arr, wrappedIteratee, done);
}
}, function(err) {
if (err) {
cb(err);
} else {
cb(null, testPassed ? testResult : getResult(false));
}
});
};
}
4 changes: 2 additions & 2 deletions lib/some.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import createTester from './internal/createTester';
import eachOf from './eachOf';
import doParallel from './internal/doParallel';
import identity from 'lodash/identity';

/**
Expand Down Expand Up @@ -32,4 +32,4 @@ import identity from 'lodash/identity';
* // if result is true then at least one of the files exists
* });
*/
export default createTester(eachOf, Boolean, identity);
export default doParallel(createTester(Boolean, identity));
4 changes: 2 additions & 2 deletions lib/someLimit.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import createTester from './internal/createTester';
import eachOfLimit from './eachOfLimit';
import doParallelLimit from './internal/doParallelLimit';
import identity from 'lodash/identity';

/**
Expand All @@ -23,4 +23,4 @@ import identity from 'lodash/identity';
* Result will be either `true` or `false` depending on the values of the async
* tests. Invoked with (err, result).
*/
export default createTester(eachOfLimit, Boolean, identity);
export default doParallelLimit(createTester(Boolean, identity));

0 comments on commit 5188c84

Please sign in to comment.