diff options
Diffstat (limited to 'lib/internal/createTester.js')
-rw-r--r-- | lib/internal/createTester.js | 48 |
1 files changed, 20 insertions, 28 deletions
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)); + } + }); }; } |