87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var utils = require('./../utils');
|
||
|
var transformData = require('./transformData');
|
||
|
var isCancel = require('../cancel/isCancel');
|
||
|
var defaults = require('../defaults');
|
||
|
var isAbsoluteURL = require('./../helpers/isAbsoluteURL');
|
||
|
var combineURLs = require('./../helpers/combineURLs');
|
||
|
|
||
|
/**
|
||
|
* Throws a `Cancel` if cancellation has been requested.
|
||
|
*/
|
||
|
function throwIfCancellationRequested(config) {
|
||
|
if (config.cancelToken) {
|
||
|
config.cancelToken.throwIfRequested();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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
|
||
|
*/
|
||
|
module.exports = function dispatchRequest(config) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
// Support baseURL config
|
||
|
if (config.baseURL && !isAbsoluteURL(config.url)) {
|
||
|
config.url = combineURLs(config.baseURL, config.url);
|
||
|
}
|
||
|
|
||
|
// Ensure headers exist
|
||
|
config.headers = config.headers || {};
|
||
|
|
||
|
// Transform request data
|
||
|
config.data = transformData(
|
||
|
config.data,
|
||
|
config.headers,
|
||
|
config.transformRequest
|
||
|
);
|
||
|
|
||
|
// Flatten headers
|
||
|
config.headers = utils.merge(
|
||
|
config.headers.common || {},
|
||
|
config.headers[config.method] || {},
|
||
|
config.headers || {}
|
||
|
);
|
||
|
|
||
|
utils.forEach(
|
||
|
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
|
||
|
function cleanHeaderConfig(method) {
|
||
|
delete config.headers[method];
|
||
|
}
|
||
|
);
|
||
|
|
||
|
var adapter = config.adapter || defaults.adapter;
|
||
|
|
||
|
return adapter(config).then(function onAdapterResolution(response) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
// Transform response data
|
||
|
response.data = transformData(
|
||
|
response.data,
|
||
|
response.headers,
|
||
|
config.transformResponse
|
||
|
);
|
||
|
|
||
|
return response;
|
||
|
}, function onAdapterRejection(reason) {
|
||
|
if (!isCancel(reason)) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
// Transform response data
|
||
|
if (reason && reason.response) {
|
||
|
reason.response.data = transformData(
|
||
|
reason.response.data,
|
||
|
reason.response.headers,
|
||
|
config.transformResponse
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Promise.reject(reason);
|
||
|
});
|
||
|
};
|