import type { Fn } from 'vuex-dispatch-infer'; declare type EventName = 'RETRIES_EXHAUESTED' | 'FETCH_QUEUE_CHANGE' | 'FETCH_QUEUE_IDLE_STATE_CHANGE'; export declare class FetchTaskCancel extends Error { } interface FetchTask { /** * 任务运行函数 */ action: () => Promise; /** * 任务结果,异步 */ res: Promise; /** * 任务是否正在运行,因为有最大并发数量的限制,可能不会马上分到时间 */ running: boolean; /** * 取消当前任务 */ cancel(): void; /** * 运行该任务,私有 */ run: () => void; } /** * 对外暴露的任务压入到队列的运行标识 */ declare type ExportFetchTask = Readonly, 'run'>>; /** * 错误处理方法 */ declare type ErrorHandleMethod = 'retry' | 'throw'; export declare class FetchQueue { /** * 最大并发数量 */ private readonly maxConcurrencyCount; /** * 最大重试次数 */ private readonly maxRetryCount; /** * 重试间隔ms */ private readonly retryInterval; /** * 错误处理方法 */ private readonly errorHandleMethod; constructor( /** * 最大并发数量 */ maxConcurrencyCount?: number, /** * 最大重试次数 */ maxRetryCount?: number, /** * 重试间隔ms */ retryInterval?: number, /** * 错误处理方法 */ errorHandleMethod?: ErrorHandleMethod); private static eventEmitter; private eventEmitter; private queue; private get currConcurrencyCount(); get conf(): import("./readonly").DeepReadonly<{ maxConcurrencyCount: number; maxRetryCount: number; retryInterval: number; errorHandleMethod: ErrorHandleMethod; }>; /** * 提醒队列发生变化 */ private noticeChange; private lastIdleState; /** * 提醒队列空闲情况发生变化 */ private noticeIdleChange; /** * 尝试运行首个空闲任务 */ private tryRunNext; /** * 运行任务 */ private runAction; /** * 等待直到当前的队列为空 */ waitUntilEmpty(): Promise; /** * 添加队监听器 */ on(name: EventName, cb: Fn): void; /** * 添加全局监听器 */ static on(name: EventName, cb: (target: FetchQueue, ...args: any[]) => any): void; /** * 添加队监听器 */ private emit; /** * 是否空闲 */ get isIdle(): boolean; /** * 压入一个任务到资源获取队列,如果有提示两个任务的元和任务函数一次则这两次函数的运行会是同一个结果 * @param meta 元标识,且将作为action函数的实参传入 * @param action 资源获取函数 */ pushAction(action: () => Promise): ExportFetchTask; } export {};