summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Robb <softnfuzzyrobb@gmail.com>2016-03-06 11:00:23 +0000
committerSteve Robb <softnfuzzyrobb@gmail.com>2016-03-06 11:00:23 +0000
commit99920c3f73be88a66046ec953ee896d1506c72e6 (patch)
tree9afd720a130fc231218dcb02b9ece4bdb60176b4
parenta6d5e9503752f78a85bb03665c4d1fe4d0e12690 (diff)
downloadasync-99920c3f73be88a66046ec953ee896d1506c72e6.tar.gz
Callback goes at the end.
-rwxr-xr-xlib/async.js32
-rwxr-xr-xtest/test-async.js30
2 files changed, 35 insertions, 27 deletions
diff --git a/lib/async.js b/lib/async.js
index e38c901..dbdb090 100755
--- a/lib/async.js
+++ b/lib/async.js
@@ -608,36 +608,44 @@
});
};
- var _argsRegEx = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
- var _diArgs = function(func) {
- var result = func.toString().match(_argsRegEx)[1].split(',');
- for (var i = 0, e = result.length; i != e; ++i)
+ var _funcParamRegEx = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
+ var _funcParamNames = function(func) {
+ var result = func.toString().match(_funcParamRegEx)[1].split(',');
+
+ for (var i = 0, e = result.length; i != e; ++i) {
result[i] = result[i].trim();
+ }
+
return result;
};
async.autoInject = function(tasks, callback) {
var injTasks = {};
- for (var i in tasks)
+ for (var i in tasks) {
injTasks[i] = (function(val) {
- if (!(val instanceof Function))
+ if (!(val instanceof Function)) {
return val;
+ }
- var args = _diArgs(val);
- if (args.length < 2)
+ var params = _funcParamNames(val);
+ if (params.length < 2) {
return val;
+ }
- args.shift();
+ params.pop();
- return args.concat(function(cb, results) {
- val.apply(null, [cb].concat(_map(args, function(a) { return results[a]; })));
+ return params.concat(function(cb, results) {
+ val.apply(null, _map(params, function(a) { return results[a]; }).concat(cb));
});
+
+ return params;
})(tasks[i]);
+ }
return this.auto(
injTasks,
callback && function(err, results) {
- callback.apply(null, [err].concat(_map(_diArgs(callback).slice(1), function(a) { return results[a]; })));
+ callback.apply(null, [err].concat(_map(_funcParamNames(callback).slice(1), function(a) { return results[a]; })));
}
);
};
diff --git a/test/test-async.js b/test/test-async.js
index bead45b..8133a1c 100755
--- a/test/test-async.js
+++ b/test/test-async.js
@@ -491,7 +491,7 @@ exports['autoInject'] = function(test){
var callOrder = [];
var testdata = [{test: 'test'}];
async.autoInject({
- task1: function(callback, task2){
+ task1: function(task2, callback){
setTimeout(function(){
callOrder.push('task1');
callback();
@@ -503,21 +503,21 @@ exports['autoInject'] = function(test){
callback();
}, 50);
},
- task3: function(callback, task2){
+ task3: function(task2, callback){
callOrder.push('task3');
callback();
},
- task4: function(callback, task1, task2){
+ task4: function(task1, task2, callback){
callOrder.push('task4');
callback();
},
- task5: function(callback, task2){
+ task5: function(task2, callback){
setTimeout(function(){
callOrder.push('task5');
callback();
}, 0);
},
- task6: function(callback, task2){
+ task6: function(task2, callback){
callOrder.push('task6');
callback();
}
@@ -531,7 +531,7 @@ exports['autoInject'] = function(test){
exports['autoInject petrify'] = function (test) {
var callOrder = [];
async.autoInject({
- task1: function (callback, task2) {
+ task1: function (task2, callback) {
setTimeout(function () {
callOrder.push('task1');
callback();
@@ -543,11 +543,11 @@ exports['autoInject petrify'] = function (test) {
callback();
}, 200);
},
- task3: function (callback, task2) {
+ task3: function (task2, callback) {
callOrder.push('task3');
callback();
},
- task4: function (callback, task1, task2) {
+ task4: function (task1, task2, callback) {
callOrder.push('task4');
callback();
}
@@ -561,7 +561,7 @@ exports['autoInject petrify'] = function (test) {
exports['autoInject results'] = function(test){
var callOrder = [];
async.autoInject({
- task1: function(callback, task2){
+ task1: function(task2, callback){
test.same(task2, 'task2');
setTimeout(function(){
callOrder.push('task1');
@@ -574,12 +574,12 @@ exports['autoInject results'] = function(test){
callback(null, 'task2');
}, 50);
},
- task3: function(callback, task2){
+ task3: function(task2, callback){
test.same(task2, 'task2');
callOrder.push('task3');
callback(null);
},
- task4: function(callback, task1, task2){
+ task4: function(task1, task2, callback){
test.same(task1, ['task1a','task1b']);
test.same(task2, 'task2');
callOrder.push('task4');
@@ -608,7 +608,7 @@ exports['autoInject error'] = function(test){
task1: function(callback){
callback('testerror');
},
- task2: function(callback, task1){
+ task2: function(task1, callback){
test.ok(false, 'task2 should not be called');
callback();
},
@@ -625,7 +625,7 @@ exports['autoInject error'] = function(test){
exports['autoInject no callback'] = function(test){
async.autoInject({
task1: function(callback){callback();},
- task2: function(callback, task1){callback(); test.done();}
+ task2: function(task1, callback){callback(); test.done();}
});
};
@@ -634,10 +634,10 @@ exports['autoInject error should pass partial results'] = function(test) {
task1: function(callback){
callback(false, 'result1');
},
- task2: function(callback, task1){
+ task2: function(task1, callback){
callback('testerror', 'result2');
},
- task3: function(callback, task2){
+ task3: function(task2, callback){
test.ok(false, 'task3 should not be called');
}
},