请求封装基类

使用模板方法模式处理请求封装抽象类, 具体类可实现protected的方法替换掉原有方法,需要实现抽象方法

可参考@request-template/axios @request-template/wechat

See

Example

// 主请求封装类
export class PrimaryRequest<CC extends CustomConfig = CustomConfig> extends RequestTemplate<CC> {
protected fetch(ctx: RetryContext<CC>): Promise<any> {
// 在此使用自己熟悉的请求工具重写fetch方法
return Promise.resolve(undefined);
}

protected handleCanceler(ctx: Context<CC>): void {
// 在此重写如何挂载canceler,可为空
}

protected isCancel(value: unknown, ctx: Context<CC>): boolean {
// 在此重写如何判断是取消的请求
return false;
}
}

Type Parameters

Hierarchy

Constructors

Properties

cache: Cache<Promise<unknown> | AxiosPromise<unknown>>

缓存

globalConfigs: Configs<CC>

全局配置

cancelerManager: Canceler<CustomConfig>

缓存管理器

Accessors

Methods

  • 使用缓存

    Parameters

    • ctx: Context<CC>
    • request: (() => Promise<unknown>)
        • (): Promise<unknown>
        • Returns Promise<unknown>

    Returns Promise<unknown> | AxiosPromise<unknown>

  • json类返回值类型

    模板方法,请求入口,重试不会执行该方法

    Type Parameters

    • T = never

    • RC extends boolean = false

    Parameters

    • requestConfig: Omit<AxiosRequestConfig<any>, "url" | "cancelToken" | "responseType"> & {
          url: string;
          responseType?: "json";
      }
    • Optional customConfig: DynamicCustomConfig<CC, RC>

    Returns Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>

  • 非json返回值类型

    模板方法,请求入口,重试不会执行该方法

    Type Parameters

    • T = never

    • RC extends boolean = false

    Parameters

    • requestConfig: Omit<AxiosRequestConfig<any>, "url" | "cancelToken"> & {
          url: string;
      }
    • Optional customConfig: DynamicCustomConfig<CC, RC>

    Returns Promise<RC extends true ? AxiosResponse<T, any> : T>

  • 简单工厂:生成get post delete等method

    Parameters

    Returns (<T, RC>(requestConfig: Omit<AxiosRequestConfig<any>, "url" | "method" | "cancelToken"> & {
        url: string;
    }, customConfig?: DynamicCustomConfig<CC, RC>) => Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>)

      • <T, RC>(requestConfig: Omit<AxiosRequestConfig<any>, "url" | "method" | "cancelToken"> & {
            url: string;
        }, customConfig?: DynamicCustomConfig<CC, RC>): Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>
      • Type Parameters

        • T = never

        • RC extends boolean = false

        Parameters

        • requestConfig: Omit<AxiosRequestConfig<any>, "url" | "method" | "cancelToken"> & {
              url: string;
          }
        • Optional customConfig: DynamicCustomConfig<CC, RC>

        Returns Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>

  • 简化版请求方法工厂 忽略data还是params;url前缀;只改axios的url,data/params,method,及自定义配置

    Parameters

    • method: Method
    • urlPrefix: string = ''

    Returns (<T, RC>(url: string, data?: {}, customConfig?: DynamicCustomConfig<CC, RC>) => Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>)

      • <T, RC>(url: string, data?: {}, customConfig?: DynamicCustomConfig<CC, RC>): Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>
      • Type Parameters

        • T = never

        • RC extends boolean = false

        Parameters

        Returns Promise<RC extends true ? AxiosResponse<ResType<T>, any> : ResType<T>>

  • 本质上跟methodFactory是一样的

    Parameters

    Returns (<T, RC>(requestConfig: Omit<AxiosRequestConfig<any>, "url" | "cancelToken"> & {
        url: string;
    }, customConfig?: DynamicCustomConfig<CC, RC>) => Promise<T>)

      • <T, RC>(requestConfig: Omit<AxiosRequestConfig<any>, "url" | "cancelToken"> & {
            url: string;
        }, customConfig?: DynamicCustomConfig<CC, RC>): Promise<T>
      • Type Parameters

        • T = never

        • RC extends boolean = false

        Parameters

        • requestConfig: Omit<AxiosRequestConfig<any>, "url" | "cancelToken"> & {
              url: string;
          }
        • Optional customConfig: DynamicCustomConfig<CC, RC>

        Returns Promise<T>

  • 根据tag移除缓存

    为什么要做这个功能:因为在移动端这类无限上拉下一页分页场景,如果下拉刷新了缓存, 那么必须清除这一url下所有分页的缓存,然而分页场景下每一页都会生成一个key,不好删除缓存

    Parameters

    Returns void

Generated using TypeDoc