diff --git a/lib/core/dispatchRequest.js b/lib/core/dispatchRequest.js index fc52c03..c8f6cd2 100644 --- a/lib/core/dispatchRequest.js +++ b/lib/core/dispatchRequest.js @@ -2,10 +2,10 @@ var utils = require('./../utils'); var transformData = require('./transformData'); +var defaults = require('../defaults'); /** - * Dispatch a request to the server using whichever adapter - * is supported by the current environment. + * Dispatch a request to the server using the configured adapter. * * @param {object} config The config that is to be used for the request * @returns {Promise} The Promise to be fulfilled @@ -35,41 +35,27 @@ module.exports = function dispatchRequest(config) { } ); - var adapter; + var adapter = config.adapter || defaults.adapter; - if (typeof config.adapter === 'function') { - // For custom adapter support - adapter = config.adapter; - } else if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = require('../adapters/xhr'); - } else if (typeof process !== 'undefined') { - // For node use HTTP adapter - adapter = require('../adapters/http'); - } + return adapter(config).then(function onAdapterResolution(response) { + // Transform response data + response.data = transformData( + response.data, + response.headers, + config.transformResponse + ); - return Promise.resolve(config) - // Wrap synchronous adapter errors and pass configuration - .then(adapter) - .then(function onFulfilled(response) { - // Transform response data - response.data = transformData( - response.data, - response.headers, + return response; + }, function onAdapterRejection(error) { + // Transform response data + if (error && error.response) { + error.response.data = transformData( + error.response.data, + error.response.headers, config.transformResponse ); + } - return response; - }, function onRejected(error) { - // Transform response data - if (error && error.response) { - error.response.data = transformData( - error.response.data, - error.response.headers, - config.transformResponse - ); - } - - return Promise.reject(error); - }); + return Promise.reject(error); + }); }; diff --git a/lib/defaults.js b/lib/defaults.js index 162ffa7..1e10e9a 100644 --- a/lib/defaults.js +++ b/lib/defaults.js @@ -14,7 +14,21 @@ function setContentTypeIfUnset(headers, value) { } } +function getDefaultAdapter() { + var adapter; + if (typeof XMLHttpRequest !== 'undefined') { + // For browsers use XHR adapter + adapter = require('./adapters/xhr'); + } else if (typeof process !== 'undefined') { + // For node use HTTP adapter + adapter = require('./adapters/http'); + } + return adapter; +} + module.exports = { + adapter: getDefaultAdapter(), + transformRequest: [function transformRequest(data, headers) { normalizeHeaderName(headers, 'Content-Type'); if (utils.isFormData(data) ||