From 5f8488ee5ee1db97dc3998b683805539e02217dc Mon Sep 17 00:00:00 2001 From: KidsKilla Date: Fri, 9 Aug 2013 15:26:08 +0400 Subject: [PATCH 1/4] Update async.js It's more useful with objects sometimes --- lib/async.js | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/async.js b/lib/async.js index 5321709..4c4b29f 100644 --- a/lib/async.js +++ b/lib/async.js @@ -1,27 +1,42 @@ /** - * @param {Array} array + * @param {Object|Array} array * @param {Function} action * @param {Function} [callback] * @example * abc.async([url1, url2], function (url, callback) { ... }, function () {}) * abc.async([func1, func2], function () {}); + * abc.async({one: url1, two: url2}, function (url, callback) { ... }, function () {}) + * abc.async({one: func1, two: func2}, function () {}); */ exports.forEach = function (array, action, callback) { - var results = []; if (!callback) { callback = action; action = function (item, callback) { item(callback); }; } - if (!array.length) { + + var counter, + results, + each; + + if (Array.isArray(array)) { + counter = array.length; + results = []; + each = arrEach; + } else { + counter = Object.keys(array).length; + results = {}; + each = objEach; + } + + if (!counter) { callback(results); } else { - var loadCounter = 0; - array.forEach(function (item, index) { + each(array, function (item, k) { action(item, function (result) { - results[index] = result; - if (++loadCounter === array.length) { + results[k] = result; + if (!counter--) { callback(results); } }); @@ -29,6 +44,14 @@ exports.forEach = function (array, action, callback) { } }; +function arrEach(arr, iter) { + arr.forEach(iter); +} +function objEach (arr, iter) { + for (var k in arr) { + iter(arr, k) + } +} /** * @param {Array} array * @param {Function} action From 238b78808cdd5ee462829f6ea747986c6b48ce89 Mon Sep 17 00:00:00 2001 From: KidsKilla Date: Fri, 9 Aug 2013 15:37:47 +0400 Subject: [PATCH 2/4] fix ibject iterator --- lib/async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/async.js b/lib/async.js index 4c4b29f..601dd1e 100644 --- a/lib/async.js +++ b/lib/async.js @@ -49,7 +49,7 @@ function arrEach(arr, iter) { } function objEach (arr, iter) { for (var k in arr) { - iter(arr, k) + iter(arr[k], k) } } /** From 07bdac0eb96f6934097c21309da4d21aefb48d8f Mon Sep 17 00:00:00 2001 From: KidsKilla Date: Fri, 9 Aug 2013 15:45:54 +0400 Subject: [PATCH 3/4] Test Case for object and 3 args --- test/async/for-each-object-3args.case.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test/async/for-each-object-3args.case.js diff --git a/test/async/for-each-object-3args.case.js b/test/async/for-each-object-3args.case.js new file mode 100644 index 0000000..4e523ba --- /dev/null +++ b/test/async/for-each-object-3args.case.js @@ -0,0 +1,15 @@ +//in +var async = require(tc.fixPath('../../lib/async.js')); +var arr = {one:1, two:2, three:3}; +async.forEach( + arr, + function (value, callback) { + callback(value * 2); + }, + function (autoResults) { + tc.out([results.one, results.two, results.three]); + tc.finish(); + } +) +//out +2,4,6 From ebd4c532689b9087ad2fe16024bf135f231c27de Mon Sep 17 00:00:00 2001 From: KidsKilla Date: Fri, 9 Aug 2013 15:47:29 +0400 Subject: [PATCH 4/4] Test Case for object and 2 args --- test/async/for-each-object-2args.case.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 test/async/for-each-object-2args.case.js diff --git a/test/async/for-each-object-2args.case.js b/test/async/for-each-object-2args.case.js new file mode 100644 index 0000000..2f55da3 --- /dev/null +++ b/test/async/for-each-object-2args.case.js @@ -0,0 +1,16 @@ +//in +var async = require(tc.fixPath('../../lib/async.js')); +var arr = { + one: function () {return 1}, + two: function () {return 2}, + three: function () {return 3} +}; +async.forEach( + arr, + function (autoResults) { + tc.out([results.one, results.two, results.three]); + tc.finish(); + } +) +//out +1,2,3