summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Yeates <yeatesgraeme@gmail.com>2015-07-02 14:18:16 -0400
committerGraeme Yeates <yeatesgraeme@gmail.com>2015-07-02 14:19:43 -0400
commit4798d8bfd13026428abd44d5b4211033e0c1e854 (patch)
tree469fcb23d986fbbbb0c6a1f74fff1cef8a86e849
parent529cd5ccb3b5ad4901d725602ab47bc96e847b12 (diff)
downloadasync-4798d8bfd13026428abd44d5b4211033e0c1e854.tar.gz
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 ed47c57..4411a78 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) {