summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfritx <uxfritz@163.com>2014-04-29 00:35:28 +0800
committerfritx <uxfritz@163.com>2014-04-29 00:35:28 +0800
commit18fd0cc3f13f0a97ed7d29f96aedb2f3740b36b2 (patch)
treecf4ac874a0aa76a9cd3f3e6b03a814ad6dc97497
parentc475003a3cb36e9ddea1b216da741c2a10709bf2 (diff)
downloadasync-18fd0cc3f13f0a97ed7d29f96aedb2f3740b36b2.tar.gz
for #521, detect callback in _asyncMap
-rwxr-xr-xlib/async.js24
-rwxr-xr-xtest/test-async.js13
2 files changed, 29 insertions, 8 deletions
diff --git a/lib/async.js b/lib/async.js
index a1d1d6a..b1e4ae5 100755
--- a/lib/async.js
+++ b/lib/async.js
@@ -234,18 +234,26 @@
var _asyncMap = function (eachfn, arr, iterator, callback) {
- var results = [];
arr = _map(arr, function (x, i) {
return {index: i, value: x};
});
- eachfn(arr, function (x, callback) {
- iterator(x.value, function (err, v) {
- results[x.index] = v;
- callback(err);
+ if (!callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err) {
+ callback(err);
+ });
});
- }, function (err) {
- callback(err, results);
- });
+ } else {
+ var results = [];
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err, v) {
+ results[x.index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
};
async.map = doParallel(_asyncMap);
async.mapSeries = doSeries(_asyncMap);
diff --git a/test/test-async.js b/test/test-async.js
index d9f2dee..cbdd7ce 100755
--- a/test/test-async.js
+++ b/test/test-async.js
@@ -1236,6 +1236,19 @@ exports['map original untouched'] = function(test){
});
};
+exports['map without main callback'] = function(test){
+ var a = [1,2,3];
+ var r = [];
+ async.map(a, function(x, callback){
+ r.push(x);
+ callback(null);
+ if (r.length >= a.length) {
+ test.same(r, a);
+ test.done();
+ }
+ });
+};
+
exports['map error'] = function(test){
test.expect(1);
async.map([1,2,3], function(x, callback){