diff options
Diffstat (limited to 'lib/async.js')
-rwxr-xr-x | lib/async.js | 32 |
1 files changed, 20 insertions, 12 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]; }))); } ); }; |