super-axios
Version: 
一款基于axios二次封装的断线重连,防抖提交,节流请求,自动取消等功能,是一个很强大的库~
49 lines (36 loc) • 2.23 kB
TypeScript
import {AxiosInstance, AxiosPromise, AxiosRequestConfig, Canceler, AxiosResponse} from "axios";
export interface Protocol {
    getRequestConfig(config: AxiosRequestConfig): RequestConfig         // 通过axios请求参数来获取原请求接口所有信息
    reconnect<R = any>(r: RequestConfig): Promise<R | AxiosResponse<R>> // 重新请求
    dispatch<R = any>(r: RequestConfig): Promise<R | AxiosResponse<R>>  // 请求方法
    getHashCode(r: AxiosRequestConfig): number                          // 获取请求唯一标识
    checkRequestExists(hashCode: number): Boolean                       // 检测是否有存在相同请求
}
export type MethodType = "default" | "delay" | "block" | "kill"
export interface RequestConfig extends AxiosRequestConfig {
    type?: MethodType            // 接口类型
    reconnect?: Boolean          // 是否需要重连
    hashCode?: number            // 当前请求hashCode
    delayTime?: number           // 私有化延迟请求时间
    cancelHandle?: Canceler      // 取消请求回调方法
    reconnectTimes?: number      // 当前重连次数
}
export interface Config extends AxiosRequestConfig {
    maxReconnectTimes?: number   // 最大重连次数,默认为5次
    delayTime?: number           // 延迟毫秒数,默认为300毫秒
    reconnectTime?: number       // 重连时间间隔
}
export class SuperAxios implements Protocol {
    public axiosInstance: AxiosInstance             // axios单例对象
    private queue: Map<number, RequestConfig<any>>  // 请求队列
    private maxReconnectTimes: number               // 最大重连次数,默认为5次
    private delayTime: number                       // 延迟毫秒数,默认为300毫秒
    private Timer?: any                             // 延时器对象
    private reconnectTime: number                   // 重连时间间隔
    constructor(config: Config)
    checkRequestExists(hashCode: number): Boolean;
    dispatch<R = any>(r: RequestConfig): Promise<R | AxiosResponse<R>>;
    getHashCode(r: AxiosRequestConfig): number;
    getRequestConfig(config: AxiosRequestConfig): RequestConfig;
    reconnect<R = any>(r: RequestConfig): Promise<R | AxiosResponse<R>>;
}