77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
import transformData from './transformData.js';
|
||
|
import isCancel from '../cancel/isCancel.js';
|
||
|
import defaults from '../defaults/index.js';
|
||
|
import CanceledError from '../cancel/CanceledError.js';
|
||
|
import AxiosHeaders from '../core/AxiosHeaders.js';
|
||
|
|
||
|
/**
|
||
|
* Throws a `CanceledError` if cancellation has been requested.
|
||
|
*
|
||
|
* @param {Object} config The config that is to be used for the request
|
||
|
*
|
||
|
* @returns {void}
|
||
|
*/
|
||
|
function throwIfCancellationRequested(config) {
|
||
|
if (config.cancelToken) {
|
||
|
config.cancelToken.throwIfRequested();
|
||
|
}
|
||
|
|
||
|
if (config.signal && config.signal.aborted) {
|
||
|
throw new CanceledError();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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
|
||
|
*/
|
||
|
export default function dispatchRequest(config) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
config.headers = AxiosHeaders.from(config.headers);
|
||
|
|
||
|
// Transform request data
|
||
|
config.data = transformData.call(
|
||
|
config,
|
||
|
config.transformRequest
|
||
|
);
|
||
|
|
||
|
const adapter = config.adapter || defaults.adapter;
|
||
|
|
||
|
return adapter(config).then(function onAdapterResolution(response) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
// Transform response data
|
||
|
response.data = transformData.call(
|
||
|
config,
|
||
|
config.transformResponse,
|
||
|
response
|
||
|
);
|
||
|
|
||
|
response.headers = AxiosHeaders.from(response.headers);
|
||
|
|
||
|
return response;
|
||
|
}, function onAdapterRejection(reason) {
|
||
|
if (!isCancel(reason)) {
|
||
|
throwIfCancellationRequested(config);
|
||
|
|
||
|
// Transform response data
|
||
|
if (reason && reason.response) {
|
||
|
reason.response.data = transformData.call(
|
||
|
config,
|
||
|
config.transformResponse,
|
||
|
reason.response
|
||
|
);
|
||
|
reason.response.headers = AxiosHeaders.from(reason.response.headers);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Promise.reject(reason);
|
||
|
});
|
||
|
}
|