axios-miniprogram/src/core/dispatchRequest.ts

63 lines
1.8 KiB
TypeScript
Raw Normal View History

import { isFunction } from '../helpers/isTypes';
2023-04-02 23:27:45 +08:00
import { isCancel, isCancelToken } from './cancel';
2023-03-23 20:09:00 +08:00
import { flattenHeaders } from './flattenHeaders';
import { AxiosTransformer, transformData } from './transformData';
2023-03-23 20:09:00 +08:00
import { request } from './request';
import { AxiosRequestConfig, AxiosResponse } from './Axios';
import { transformURL } from './transformURL';
import { isAxiosError } from './createError';
2023-03-23 20:09:00 +08:00
function throwIfCancellationRequested(config: AxiosRequestConfig) {
2023-04-02 23:27:45 +08:00
const { cancelToken } = config;
if (isCancelToken(cancelToken)) {
cancelToken.throwIfRequested();
2023-03-23 20:09:00 +08:00
}
}
export default function dispatchRequest<TData = unknown>(
config: AxiosRequestConfig,
): Promise<AxiosResponse> {
throwIfCancellationRequested(config);
const { transformRequest, transformResponse } = config;
2023-03-23 20:09:00 +08:00
config.url = transformURL(config);
config.method = config.method ?? 'get';
2023-03-23 20:09:00 +08:00
config.headers = flattenHeaders(config);
transform(config, transformRequest);
function onSuccess(response: AxiosResponse<TData>) {
throwIfCancellationRequested(config);
transform(response, transformResponse);
return response;
2023-04-03 21:03:33 +08:00
}
2023-03-23 20:09:00 +08:00
function onError(reason: unknown) {
if (!isCancel(reason)) {
2023-04-03 21:03:33 +08:00
throwIfCancellationRequested(config);
if (isAxiosError(reason)) {
transform(reason.response as AxiosResponse<TData>, transformResponse);
2023-03-23 20:09:00 +08:00
}
}
if (isFunction(config.errorHandler)) {
return config.errorHandler(reason);
}
return Promise.reject(reason);
}
function transform<TData = unknown>(
target: AxiosRequestConfig | AxiosResponse<TData>,
transformer?: AxiosTransformer | AxiosTransformer[],
) {
target.data = transformData(
target.data as AnyObject,
target.headers,
transformer,
) as TData;
}
return request<TData>(config).then(onSuccess).catch(onError);
2023-03-23 20:09:00 +08:00
}