diff options
author | Alexander Early <alexander.early@gmail.com> | 2016-03-19 22:08:12 -0700 |
---|---|---|
committer | Alexander Early <alexander.early@gmail.com> | 2016-03-19 22:08:12 -0700 |
commit | 75fffa0288f44f2929994bee3e96be28c784ee6f (patch) | |
tree | e550061c69cee4204297fc0c8f6be671d59dfebf | |
parent | fa85fcaf02e0689876159465e0490901d03b9bdc (diff) | |
download | async-75fffa0288f44f2929994bee3e96be28c784ee6f.tar.gz |
use initialParams to simplify callback extraction
-rw-r--r-- | lib/asyncify.js | 5 | ||||
-rw-r--r-- | lib/constant.js | 6 | ||||
-rw-r--r-- | lib/ensureAsync.js | 6 | ||||
-rw-r--r-- | lib/internal/applyEach.js | 4 | ||||
-rw-r--r-- | lib/internal/initialParams.js | 9 | ||||
-rw-r--r-- | lib/memoize.js | 4 | ||||
-rw-r--r-- | lib/retryable.js | 6 | ||||
-rw-r--r-- | lib/timeout.js | 19 |
8 files changed, 28 insertions, 31 deletions
diff --git a/lib/asyncify.js b/lib/asyncify.js index f9f00e1..cf392e9 100644 --- a/lib/asyncify.js +++ b/lib/asyncify.js @@ -1,11 +1,10 @@ 'use strict'; import isObject from 'lodash/isObject'; -import rest from 'lodash/rest'; +import initialParams from './internal/initialParams'; export default function asyncify(func) { - return rest(function (args) { - var callback = args.pop(); + return initialParams(function (args, callback) { var result; try { result = func.apply(this, args); diff --git a/lib/constant.js b/lib/constant.js index ecaff80..133b244 100644 --- a/lib/constant.js +++ b/lib/constant.js @@ -1,11 +1,11 @@ 'use strict'; import rest from 'lodash/rest'; +import initialParams from './internal/initialParams'; export default rest(function(values) { var args = [null].concat(values); - return function () { - var callback = [].slice.call(arguments).pop(); + return initialParams(function (ignoredArgs, callback) { return callback.apply(this, args); - }; + }); }); diff --git a/lib/ensureAsync.js b/lib/ensureAsync.js index 4f4f762..091f3ae 100644 --- a/lib/ensureAsync.js +++ b/lib/ensureAsync.js @@ -1,12 +1,10 @@ 'use strict'; -import rest from 'lodash/rest'; - import setImmediate from './internal/setImmediate'; +import initialParams from './internal/initialParams'; export default function ensureAsync(fn) { - return rest(function (args) { - var callback = args.pop(); + return initialParams(function (args, callback) { var sync = true; args.push(function () { var innerArgs = arguments; diff --git a/lib/internal/applyEach.js b/lib/internal/applyEach.js index 25bcce1..47710d4 100644 --- a/lib/internal/applyEach.js +++ b/lib/internal/applyEach.js @@ -1,12 +1,12 @@ 'use strict'; import rest from 'lodash/rest'; +import initialParams from './initialParams'; export default function applyEach(eachfn) { return rest(function(fns, args) { - var go = rest(function(args) { + var go = initialParams(function(args, callback) { var that = this; - var callback = args.pop(); return eachfn(fns, function (fn, _, cb) { fn.apply(that, args.concat([cb])); }, diff --git a/lib/internal/initialParams.js b/lib/internal/initialParams.js new file mode 100644 index 0000000..74fab52 --- /dev/null +++ b/lib/internal/initialParams.js @@ -0,0 +1,9 @@ +import toArray from 'lodash/toArray'; + +export default function (fn) { + return function (/*args..., callback*/) { + var args = toArray(arguments); + var callback = args.pop(); + fn(args, callback); + }; +} diff --git a/lib/memoize.js b/lib/memoize.js index 30b989c..325f4f1 100644 --- a/lib/memoize.js +++ b/lib/memoize.js @@ -5,13 +5,13 @@ import rest from 'lodash/rest'; import has from 'lodash/has'; import setImmediate from './internal/setImmediate'; +import initialParams from './internal/initialParams'; export default function memoize(fn, hasher) { var memo = Object.create(null); var queues = Object.create(null); hasher = hasher || identity; - var memoized = rest(function memoized(args) { - var callback = args.pop(); + var memoized = initialParams(function memoized(args, callback) { var key = hasher.apply(null, args); if (has(memo, key)) { setImmediate(function() { diff --git a/lib/retryable.js b/lib/retryable.js index 26fa609..f01d9b9 100644 --- a/lib/retryable.js +++ b/lib/retryable.js @@ -1,14 +1,12 @@ import retry from './retry'; -import rest from 'lodash/rest'; +import initialParams from './internal/initialParams'; export default function (opts, task) { if (!task) { task = opts; opts = null; } - return rest(function (args) { - var callback = args.pop(); - + return initialParams(function (args, callback) { function taskFn(cb) { task.apply(null, args.concat([cb])); } diff --git a/lib/timeout.js b/lib/timeout.js index c8c9dfd..6af4f52 100644 --- a/lib/timeout.js +++ b/lib/timeout.js @@ -1,5 +1,7 @@ 'use strict'; +import initialParams from './internal/initialParams'; + export default function timeout(asyncFn, miliseconds) { var originalCallback, timer; var timedOut = false; @@ -18,19 +20,10 @@ export default function timeout(asyncFn, miliseconds) { originalCallback(error); } - function injectCallback(asyncFnArgs) { - // replace callback in asyncFn args - var args = Array.prototype.slice.call(asyncFnArgs, 0); - originalCallback = args[args.length - 1]; - args[args.length - 1] = injectedCallback; - return args; - } - - function wrappedFn() { + return initialParams(function (args, origCallback) { + originalCallback = origCallback; // setup timer and call original function timer = setTimeout(timeoutCallback, miliseconds); - asyncFn.apply(null, injectCallback(arguments)); - } - - return wrappedFn; + asyncFn.apply(null, args.concat(injectedCallback)); + }); } |