From 4798d8bfd13026428abd44d5b4211033e0c1e854 Mon Sep 17 00:00:00 2001 From: Graeme Yeates Date: Thu, 2 Jul 2015 14:18:16 -0400 Subject: Implement _detect via tester --- lib/async.js | 41 ++++++++++++++++------------------------- 1 file 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) { -- cgit v1.2.1