code: function(options) {
        options = options || {};
  
        var startTime = new Date().getTime(),
            requestNumber = ++this.requestNumber,
            requestHandler = options.handler;
  
        // The returned promise is part of chain that starts with the asynchronous construction of the request options.
        var promise = q.fcall(_.bind(this.buildRequestOptions, this), options).then(_.bind(this.checkRequestOptions, this));
  
        // Then the HTTP request is started.
        promise = promise.then(_.bind(this.sendRequest, this, requestNumber, requestHandler, startTime));
  
        // Finally, handlers are added at the end of the promise chain to emit `error` or `response` events depending on the result.
        return promise.spread(_.bind(this.handleResponse, this, requestNumber, startTime), _.bind(this.handleError, this, requestNumber));
      }
docs: ## #request(options) Starts an HTTP request and returns a promise that will be resolved with the HTTP response or rejected if an error occurs.  var promise = this.get({ method: 'GET', url: 'http://example.com' });  promise.then(function(response) { console.log('Server responded with: ' + response.body); }, function(err) { console.warn('An error occurred: ' + err); });  Look at the [request library documentation](https://github.com/mikeal/request) for available options.  **Additional options:**  * `filters` - an array of filter functions; each function will be called with the request options and is expected to return the processed options.  function signatureFilter(options) { options.headers = { 'X-Signature': sha1(options.method + options.url) }; return options; }  this.request({ method: 'GET', url: 'http://example.com', filters: [ signatureFilter ] }); * `handler` - a function that is passed the request object before the HTTP request starts; this supports [forms from the request library](https://github.com/mikeal/request#forms).  function uploadFile(request) { var form = request.form(); form.append('file', fs.createReadStream(file)); }  this.request({ method: 'GET', url: 'http://example.com', handler: uploadFile });