await-num-q
Version:
一个用于 处理 指定并行异步任务数量的 队列
72 lines (71 loc) • 2.14 kB
TypeScript
/**
* 异步参数对象
* @property max 最大并发数
* @property retry 失败重试次数
* @property endCallback 队列结束回调函数
*/
export type AsyncParams = {
max?: number;
retry?: number;
endCallback?: () => void;
};
export type RunFun = (...args: any) => Promise<any>;
/**
* 异步任务对象
*/
export interface RunFunBoj<T extends RunFun = () => Promise<any>> {
status: "wait" | "ing" | "end" | "fail";
target: T;
retry: number;
callback?: <D>(data: D) => void;
err?: (e: any) => void;
}
/**
* 异步队列
*/
export declare class asyncQueue {
#private;
constructor({ max, retry, endCallback, }: AsyncParams);
/**
* 添加任务
* @param f 目标函数
* @param callback 成功回调函数
* @param err 错误回调函数
* @returns 添加成功与否
*/
push<T extends RunFun>(f: T, callback?: <D>(data: D) => void, err?: (e: any) => void): boolean;
/**
* 清除运行完成的任务
*/
clear(fial?: boolean): void;
/**
* 添加并运行任务 若是没有传入函数 运行 之前传入的任务
* @param f 目标函数
* @param callback 成功回调函数
* @param err 错误回调函数
* @returns 添加成功与否
*/
run<T extends RunFun>(f?: T, callback?: <D>(data: D) => void, err?: (e: any) => void): Promise<void>;
get status(): "ing" | "end";
/**
* 获取所有的 任务
* @returns
*/
getTasks(): RunFunBoj<() => Promise<any>>[];
/**
* 异步运行并得到返回值
* @param fun 目标函数
* @returns
*/
wait<T extends RunFun>(fun: T): Promise<ReturnType<T>>;
}
/**
* 在某个异步请求 参数相同 返回的值相同
* 并且在同一时间段 会发送多个亲求的场景
* 压缩正在进行的异步请求 为一个
* 避免同时条用多个请求导致后续请求 挂起
* @param asyncFun 异步函数
* @param param 函数传参 必须传入支持序列化的
* @returns
*/
export declare function MergeAsync<T extends RunFun>(asyncFun: T, ...param: any): Promise<ReturnType<T>>;