summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2015-07-02 11:34:00 -0700
committerAlexander Early <alexander.early@gmail.com>2015-07-02 11:34:00 -0700
commit6364921f71c4f6eac84e54d8287eea9d6006e7e6 (patch)
tree39765b517e87e1b1cfab3d777b1298d8fe46ab1f
parent0b7a7253432435751c349cfecd7b1403289aa8fc (diff)
parent4798d8bfd13026428abd44d5b4211033e0c1e854 (diff)
downloadasync-6364921f71c4f6eac84e54d8287eea9d6006e7e6.tar.gz
Merge pull request #829 from megawac/find-tester
Implement _detect via tester
-rw-r--r--lib/async.js41
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) {