From 099fe186f08044ce49a943f7ef6476d7fb4ed89b Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 24 Sep 2016 02:23:00 -0700 Subject: [PATCH] spawn: fix call and promisify. --- lib/utils/spawn.js | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/utils/spawn.js b/lib/utils/spawn.js index 0b472fa5..86abffac 100644 --- a/lib/utils/spawn.js +++ b/lib/utils/spawn.js @@ -217,6 +217,23 @@ function wrap(resolve, reject) { }; } +/** + * Call a function that accepts node.js + * style callbacks, wrap with a promise. + * @private + * @param {Object} ctx + * @param {Function} func + * @param {Array} args + * @returns {Promise} + */ + +function _call(ctx, func, args) { + return new Promise(function(resolve, reject) { + args.push(wrap(resolve, reject)); + func.apply(ctx, args); + }); +} + /** * Call a function that accepts node.js * style callbacks, wrap with a promise. @@ -225,17 +242,13 @@ function wrap(resolve, reject) { */ function call(func) { - var self = this; var args = new Array(Math.max(0, arguments.length - 1)); var i; for (i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; - return new Promise(function(resolve, reject) { - args.push(wrap(resolve, reject)); - func.apply(self, args); - }); + return _call(this, func, args); } /** @@ -249,7 +262,13 @@ function call(func) { function promisify(func, ctx) { return function() { - return call.call(ctx, arguments); + var args = new Array(arguments.length); + var i; + + for (i = 0; i < arguments.length; i++) + args[i] = arguments[i]; + + return _call(ctx || this, func, args); }; }