Skip to content

Commit 5188c84

Browse files
author
Hubert Argasinski
authored
Merge pull request caolan#1360 from hargasinski/createrTester-use-doLimit
standardize detect, every, and some implementations to use doParallel & equivalents
2 parents d3f583a + c7592c9 commit 5188c84

File tree

9 files changed

+38
-48
lines changed

9 files changed

+38
-48
lines changed

lib/detect.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import identity from 'lodash/identity';
22

33
import createTester from './internal/createTester';
4-
import eachOf from './eachOf';
4+
import doParallel from './internal/doParallel';
55
import findGetResult from './internal/findGetResult';
66

77
/**
@@ -39,4 +39,4 @@ import findGetResult from './internal/findGetResult';
3939
* // result now equals the first file in the list that exists
4040
* });
4141
*/
42-
export default createTester(eachOf, identity, findGetResult);
42+
export default doParallel(createTester(identity, findGetResult));

lib/detectLimit.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import identity from 'lodash/identity';
22

33
import createTester from './internal/createTester';
4-
import eachOfLimit from './eachOfLimit';
4+
import doParallelLimit from './internal/doParallelLimit';
55
import findGetResult from './internal/findGetResult';
66

77
/**
@@ -26,4 +26,4 @@ import findGetResult from './internal/findGetResult';
2626
* (iteratee) or the value `undefined` if none passed. Invoked with
2727
* (err, result).
2828
*/
29-
export default createTester(eachOfLimit, identity, findGetResult);
29+
export default doParallelLimit(createTester(identity, findGetResult));

lib/detectSeries.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
import identity from 'lodash/identity';
2-
3-
import createTester from './internal/createTester';
4-
import eachOfSeries from './eachOfSeries';
5-
import findGetResult from './internal/findGetResult';
1+
import detectLimit from './detectLimit';
2+
import doLimit from './internal/doLimit';
63

74
/**
85
* The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.
@@ -24,4 +21,4 @@ import findGetResult from './internal/findGetResult';
2421
* (iteratee) or the value `undefined` if none passed. Invoked with
2522
* (err, result).
2623
*/
27-
export default createTester(eachOfSeries, identity, findGetResult);
24+
export default doLimit(detectLimit, 1);

lib/eachOf.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import isArrayLike from 'lodash/isArrayLike';
22

3+
import breakLoop from './internal/breakLoop';
34
import eachOfLimit from './eachOfLimit';
45
import doLimit from './internal/doLimit';
56
import noop from 'lodash/noop';
@@ -16,10 +17,10 @@ function eachOfArrayLike(coll, iteratee, callback) {
1617
callback(null);
1718
}
1819

19-
function iteratorCallback(err) {
20+
function iteratorCallback(err, value) {
2021
if (err) {
2122
callback(err);
22-
} else if (++completed === length) {
23+
} else if ((++completed === length) || value === breakLoop) {
2324
callback(null);
2425
}
2526
}

lib/every.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import createTester from './internal/createTester';
2-
import eachOf from './eachOf';
2+
import doParallel from './internal/doParallel';
33
import notId from './internal/notId';
44

55
/**
@@ -30,4 +30,4 @@ import notId from './internal/notId';
3030
* // if result is true then every file exists
3131
* });
3232
*/
33-
export default createTester(eachOf, notId, notId);
33+
export default doParallel(createTester(notId, notId));

lib/everyLimit.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import createTester from './internal/createTester';
2-
import eachOfLimit from './eachOfLimit';
2+
import doParallelLimit from './internal/doParallelLimit';
33
import notId from './internal/notId';
44

55
/**
@@ -22,4 +22,4 @@ import notId from './internal/notId';
2222
* `iteratee` functions have finished. Result will be either `true` or `false`
2323
* depending on the values of the async tests. Invoked with (err, result).
2424
*/
25-
export default createTester(eachOfLimit, notId, notId);
25+
export default doParallelLimit(createTester(notId, notId));

lib/internal/createTester.js

+20-28
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,29 @@
1-
'use strict';
21
import noop from 'lodash/noop';
32
import breakLoop from './breakLoop';
43

5-
export default function _createTester(eachfn, check, getResult) {
6-
return function(arr, limit, iteratee, cb) {
7-
function done() {
8-
if (cb) {
9-
cb(null, getResult(false));
10-
}
11-
}
12-
function wrappedIteratee(x, _, callback) {
13-
if (!cb) return callback();
14-
iteratee(x, function (err, v) {
15-
// Check cb as another iteratee may have resolved with a
16-
// value or error since we started this iteratee
17-
if (cb && (err || check(v))) {
18-
if (err) cb(err);
19-
else cb(err, getResult(true, x));
20-
cb = iteratee = false;
21-
callback(err, breakLoop);
4+
export default function _createTester(check, getResult) {
5+
return function(eachfn, arr, iteratee, cb) {
6+
cb = cb || noop;
7+
var testPassed = false;
8+
var testResult;
9+
eachfn(arr, function(value, _, callback) {
10+
iteratee(value, function(err, result) {
11+
if (err) {
12+
callback(err);
13+
} else if (check(result) && !testResult) {
14+
testPassed = true;
15+
testResult = getResult(true, value);
16+
callback(null, breakLoop);
2217
} else {
2318
callback();
2419
}
2520
});
26-
}
27-
if (arguments.length > 3) {
28-
cb = cb || noop;
29-
eachfn(arr, limit, wrappedIteratee, done);
30-
} else {
31-
cb = iteratee;
32-
cb = cb || noop;
33-
iteratee = limit;
34-
eachfn(arr, wrappedIteratee, done);
35-
}
21+
}, function(err) {
22+
if (err) {
23+
cb(err);
24+
} else {
25+
cb(null, testPassed ? testResult : getResult(false));
26+
}
27+
});
3628
};
3729
}

lib/some.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import createTester from './internal/createTester';
2-
import eachOf from './eachOf';
2+
import doParallel from './internal/doParallel';
33
import identity from 'lodash/identity';
44

55
/**
@@ -32,4 +32,4 @@ import identity from 'lodash/identity';
3232
* // if result is true then at least one of the files exists
3333
* });
3434
*/
35-
export default createTester(eachOf, Boolean, identity);
35+
export default doParallel(createTester(Boolean, identity));

lib/someLimit.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import createTester from './internal/createTester';
2-
import eachOfLimit from './eachOfLimit';
2+
import doParallelLimit from './internal/doParallelLimit';
33
import identity from 'lodash/identity';
44

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

0 commit comments

Comments
 (0)