|
1 |
| -'use strict'; |
2 | 1 | import noop from 'lodash/noop';
|
3 | 2 | import breakLoop from './breakLoop';
|
4 | 3 |
|
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); |
22 | 17 | } else {
|
23 | 18 | callback();
|
24 | 19 | }
|
25 | 20 | });
|
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 | + }); |
36 | 28 | };
|
37 | 29 | }
|
0 commit comments