axios-miniprogram/src/axios.ts

81 lines
2.0 KiB
TypeScript
Raw Normal View History

2020-04-16 00:23:24 +08:00
/*
* @Author: early-autumn
* @Date: 2020-04-15 12:45:18
* @LastEditors: early-autumn
2020-04-20 22:33:15 +08:00
* @LastEditTime: 2020-04-20 14:48:03
2020-04-16 00:23:24 +08:00
*/
2020-04-17 15:42:38 +08:00
import { AxiosRequestConfig, Data, AxiosResponse, AxiosBaseInstance, AxiosInstance } from './types';
2020-04-16 00:23:24 +08:00
import Axios from './core/Axios';
2020-04-20 10:34:16 +08:00
import mergeConfig from './core/mergeConfig';
2020-04-17 00:18:59 +08:00
import CancelToken from './cancel/CancelToken';
import isCancel from './cancel/isCancel';
2020-04-20 10:34:16 +08:00
import defaults from './defaults';
2020-04-16 00:23:24 +08:00
/**
* Axios
*
2020-04-17 12:06:41 +08:00
* Axios
2020-04-16 00:23:24 +08:00
*/
2020-04-17 00:18:59 +08:00
function createInstance(config: AxiosRequestConfig): AxiosInstance {
2020-04-16 00:23:24 +08:00
const instance = new Axios(config);
/**
* axios
*
* @
*
* @param url :
* @param config :
*
* @
*
* @param url :
* @param config :
*/
2020-04-17 15:42:38 +08:00
function axios<T extends Data>(
2020-04-17 00:18:59 +08:00
url: AxiosRequestConfig | string,
config: AxiosRequestConfig = {}
2020-04-16 00:23:24 +08:00
): Promise<AxiosResponse<T>> {
2020-04-17 00:18:59 +08:00
let requestConfig: AxiosRequestConfig;
2020-04-16 00:23:24 +08:00
// 调用方式一处理请求配置
if (typeof url !== 'string') {
requestConfig = url;
}
// 调用方式二处理请求配置
else {
requestConfig = { ...config, url };
}
return instance.request(requestConfig);
}
2020-04-20 22:33:15 +08:00
// instance 的属性设置到 axios 函数中
Object.assign(axios, instance);
// instance 的方法设置到 axios 函数中
Object.setPrototypeOf(axios, Object.getPrototypeOf(instance));
2020-04-16 00:23:24 +08:00
return axios as AxiosInstance;
}
2020-04-17 12:06:41 +08:00
/**
* Axios
*/
2020-04-17 00:18:59 +08:00
const axios = createInstance(defaults);
// 添加 create 工厂方法
2020-04-18 17:06:01 +08:00
axios.create = function create(config: AxiosRequestConfig = {}): AxiosBaseInstance {
2020-04-17 00:18:59 +08:00
return createInstance(mergeConfig(axios.defaults, config));
};
2020-04-17 23:20:34 +08:00
// 添加 Axios 类
axios.Axios = Axios;
2020-04-18 17:06:01 +08:00
// 添加 CancelToken 类
2020-04-17 00:18:59 +08:00
axios.CancelToken = CancelToken;
2020-04-18 17:06:01 +08:00
// 添加判断取消方法
2020-04-17 00:18:59 +08:00
axios.isCancel = isCancel;
export default axios;