export interface InterceptorResolved { (value: T): T | Promise; } export interface InterceptorRejected { (error: unknown): T | Promise; } /** * 拦截器 */ export interface Interceptor { /** * 成功的回调 */ resolved: InterceptorResolved; /** * 失败的回调 */ rejected?: InterceptorRejected; } export interface InterceptorExecutor { (interceptor: Interceptor): void; } /** * 拦截器管理器 */ export default class InterceptorManager { /** * @internal * * 生成拦截器标识符 */ private id = 0; /** * @internal * * 拦截器缓存池 */ private interceptors = new Map>(); /** * @internal * * 拦截器数量 */ get size() { return this.interceptors.size; } /** * 添加拦截器 * * @param resolved 成功的回调 * @param rejected 失败的回调 * @returns 拦截器标识符(可用于移除拦截器) */ use( resolved: InterceptorResolved, rejected?: InterceptorRejected, ): number { this.interceptors.set(++this.id, { resolved, rejected, }); return this.id; } /** * 移除拦截器 * * @param id 拦截器标识符 */ eject(id: number): boolean { return this.interceptors.delete(id); } /** * 清空拦截器 */ clear() { this.interceptors.clear(); } /** * @internal * * 遍历拦截器 * * @param executor 执行器 */ forEach(executor: InterceptorExecutor): void { this.interceptors.forEach(executor); } }