summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2016-03-19 22:08:12 -0700
committerAlexander Early <alexander.early@gmail.com>2016-03-19 22:08:12 -0700
commit75fffa0288f44f2929994bee3e96be28c784ee6f (patch)
treee550061c69cee4204297fc0c8f6be671d59dfebf
parentfa85fcaf02e0689876159465e0490901d03b9bdc (diff)
downloadasync-75fffa0288f44f2929994bee3e96be28c784ee6f.tar.gz
use initialParams to simplify callback extraction
-rw-r--r--lib/asyncify.js5
-rw-r--r--lib/constant.js6
-rw-r--r--lib/ensureAsync.js6
-rw-r--r--lib/internal/applyEach.js4
-rw-r--r--lib/internal/initialParams.js9
-rw-r--r--lib/memoize.js4
-rw-r--r--lib/retryable.js6
-rw-r--r--lib/timeout.js19
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));
+ });
}