diff options
author | Hubert Argasinski <hubert@hubdoc.com> | 2017-01-30 20:16:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-30 20:16:09 -0500 |
commit | 5188c840b36eeef0550a4ab0e5d4ed2f41bbdc95 (patch) | |
tree | 3e0e3414441f411b4e5e533d080a142dc2087e1f | |
parent | d3f583a1d0e6d248b3dc5adbe20ac1c4ccdb92c5 (diff) | |
parent | c7592c9b93af02f5762d1ff4bdcda78aff53e487 (diff) | |
download | async-5188c840b36eeef0550a4ab0e5d4ed2f41bbdc95.tar.gz |
Merge pull request #1360 from hargasinski/createrTester-use-doLimit
standardize detect, every, and some implementations to use doParallel & equivalents
-rw-r--r-- | lib/detect.js | 4 | ||||
-rw-r--r-- | lib/detectLimit.js | 4 | ||||
-rw-r--r-- | lib/detectSeries.js | 9 | ||||
-rw-r--r-- | lib/eachOf.js | 5 | ||||
-rw-r--r-- | lib/every.js | 4 | ||||
-rw-r--r-- | lib/everyLimit.js | 4 | ||||
-rw-r--r-- | lib/internal/createTester.js | 48 | ||||
-rw-r--r-- | lib/some.js | 4 | ||||
-rw-r--r-- | lib/someLimit.js | 4 |
9 files changed, 38 insertions, 48 deletions
diff --git a/lib/detect.js b/lib/detect.js index 8119b05..5f5a7ef 100644 --- a/lib/detect.js +++ b/lib/detect.js @@ -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'; /** @@ -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)); diff --git a/lib/detectLimit.js b/lib/detectLimit.js index cefff55..d0f2a92 100644 --- a/lib/detectLimit.js +++ b/lib/detectLimit.js @@ -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'; /** @@ -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)); diff --git a/lib/detectSeries.js b/lib/detectSeries.js index 3086a62..51413df 100644 --- a/lib/detectSeries.js +++ b/lib/detectSeries.js @@ -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. @@ -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); diff --git a/lib/eachOf.js b/lib/eachOf.js index 73d1026..798f270 100644 --- a/lib/eachOf.js +++ b/lib/eachOf.js @@ -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'; @@ -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); } } diff --git a/lib/every.js b/lib/every.js index 8330718..b34ad1f 100644 --- a/lib/every.js +++ b/lib/every.js @@ -1,5 +1,5 @@ import createTester from './internal/createTester'; -import eachOf from './eachOf'; +import doParallel from './internal/doParallel'; import notId from './internal/notId'; /** @@ -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)); diff --git a/lib/everyLimit.js b/lib/everyLimit.js index 9bcebb1..4cc7091 100644 --- a/lib/everyLimit.js +++ b/lib/everyLimit.js @@ -1,5 +1,5 @@ import createTester from './internal/createTester'; -import eachOfLimit from './eachOfLimit'; +import doParallelLimit from './internal/doParallelLimit'; import notId from './internal/notId'; /** @@ -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)); diff --git a/lib/internal/createTester.js b/lib/internal/createTester.js index b37d0f1..9fc03e1 100644 --- a/lib/internal/createTester.js +++ b/lib/internal/createTester.js @@ -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)); + } + }); }; } diff --git a/lib/some.js b/lib/some.js index fd1780f..3cb77e8 100644 --- a/lib/some.js +++ b/lib/some.js @@ -1,5 +1,5 @@ import createTester from './internal/createTester'; -import eachOf from './eachOf'; +import doParallel from './internal/doParallel'; import identity from 'lodash/identity'; /** @@ -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)); diff --git a/lib/someLimit.js b/lib/someLimit.js index 2ef4f78..bf4c601 100644 --- a/lib/someLimit.js +++ b/lib/someLimit.js @@ -1,5 +1,5 @@ import createTester from './internal/createTester'; -import eachOfLimit from './eachOfLimit'; +import doParallelLimit from './internal/doParallelLimit'; import identity from 'lodash/identity'; /** @@ -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)); |