Source: promise/lib/utils.js

var promisify = require('es6-promisify');

/** * @namespace */
var PromiseUtils = module.exports;

// same reference as other files use, for tidyness
var promiseUtils = PromiseUtils;

/**
 * Wraps the client request method on an instance, making it return a promise in every case except when the fourth argument is explicitly set to false
 * @param {Function} request The original request method
 * @return {Function}
 */
PromiseUtils.wrapClientRequestMethod = function(request) {
  var promisified = promisify(request);

  return function(method, params, id, shouldCall) {
    if(shouldCall === false) {
      // this should return a raw request for use in batches
      return request(method, params, id)
    };
    return promisified.apply(this, arguments);
  };
};