spawn: fix call and promisify.

This commit is contained in:
Christopher Jeffrey 2016-09-24 02:23:00 -07:00
parent 24b20b8317
commit 099fe186f0
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -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);
};
}