diff options
Diffstat (limited to 'lib/internal/createTester.js')
-rw-r--r-- | lib/internal/createTester.js | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/lib/internal/createTester.js b/lib/internal/createTester.js index ac38bf7..b37d0f1 100644 --- a/lib/internal/createTester.js +++ b/lib/internal/createTester.js @@ -1,30 +1,27 @@ '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(err) { + function done() { if (cb) { - if (err) { - cb(err); - } else { - cb(null, getResult(false)); - } + cb(null, getResult(false)); } } function wrappedIteratee(x, _, callback) { if (!cb) return callback(); iteratee(x, function (err, v) { - if (cb) { - if (err) { - cb(err); - cb = iteratee = false; - } else if (check(v)) { - cb(null, getResult(true, x)); - cb = iteratee = false; - } + // 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); + } else { + callback(); } - callback(); }); } if (arguments.length > 3) { |