diff options
author | Alexander Early <alexander.early@gmail.com> | 2015-07-02 11:34:00 -0700 |
---|---|---|
committer | Alexander Early <alexander.early@gmail.com> | 2015-07-02 11:34:00 -0700 |
commit | 6364921f71c4f6eac84e54d8287eea9d6006e7e6 (patch) | |
tree | 39765b517e87e1b1cfab3d777b1298d8fe46ab1f | |
parent | 0b7a7253432435751c349cfecd7b1403289aa8fc (diff) | |
parent | 4798d8bfd13026428abd44d5b4211033e0c1e854 (diff) | |
download | async-6364921f71c4f6eac84e54d8287eea9d6006e7e6.tar.gz |
Merge pull request #829 from megawac/find-tester
Implement _detect via tester
-rw-r--r-- | lib/async.js | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/lib/async.js b/lib/async.js index e171151..67404c7 100644 --- a/lib/async.js +++ b/lib/async.js @@ -12,6 +12,9 @@ function identity(v) { return v; } + function toBool(v) { + return !!v; + } function notId(v) { return !v; } @@ -437,34 +440,16 @@ async.reject = doParallel(_reject); async.rejectSeries = doSeries(_reject); - function _detect(eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, index, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - main_callback = noop; - } - else { - callback(); - } - }); - }, function () { - main_callback(); - }); - } - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - function _createTester(eachfn, check, defaultValue) { + function _createTester(eachfn, check, getResult) { return function(arr, limit, iterator, cb) { function done() { - if (cb) cb(defaultValue); + if (cb) cb(getResult(false, void 0)); } function iteratee(x, _, callback) { if (!cb) return callback(); iterator(x, function (v) { if (cb && check(v)) { - cb(!defaultValue); + cb(getResult(true, x)); cb = iterator = false; } callback(); @@ -481,14 +466,20 @@ } async.any = - async.some = _createTester(async.eachOf, identity, false); + async.some = _createTester(async.eachOf, toBool, identity); - async.someLimit = _createTester(async.eachOfLimit, identity, false); + async.someLimit = _createTester(async.eachOfLimit, toBool, identity); async.all = - async.every = _createTester(async.eachOf, notId, true); + async.every = _createTester(async.eachOf, notId, notId); + + async.everyLimit = _createTester(async.eachOfLimit, notId, notId); - async.everyLimit = _createTester(async.eachOfLimit, notId, true); + function _findGetResult(v, x) { + return x; + } + async.detect = _createTester(async.eachOf, identity, _findGetResult); + async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult); async.sortBy = function (arr, iterator, callback) { async.map(arr, function (x, callback) { |