@gdjiami/jslib
Version:
Jiami FrontEnd helpers and Services
75 lines (74 loc) • 2.21 kB
TypeScript
/**
* promise、异步操作相关的工具函数。
*/
/**
* 类型定义
*/
export declare type PromiseResolver<T> = (val: T) => void;
export declare type PromiseReject = (reason: any) => void;
export declare type PromiseCallback<T> = (res: PromiseResolver<T>, rej: PromiseReject) => void;
/**
* 延迟指定毫秒
*/
export declare function delay(ms: number): Promise<{}>;
/**
* 增加超时机制的promise
*/
export declare function promiseWithTimeout<T>(prom: PromiseCallback<T>, timeout: number): Promise<T>;
/**
* 可重试的promise, 出现异常时进行重试
* @param prom
* @param time 重试的次数
* @param duration 重试的间隔
*/
export declare function retryablePromise<T>(prom: () => Promise<T>, time?: number, duration?: number): Promise<T | undefined>;
/**
* 抽取出promise的Resolve和Reject函数, 可以在外部进行使用
*
* @example
* ```js
* const { promise, reject, resolve } = extraPromise()
* ```
*/
export declare function extraPromise<T>(): Promise<{
promise: Promise<T>;
reject: PromiseReject;
resolve: PromiseResolver<T>;
}>;
/**
* 按照 push 顺序执行并发的任务
* 防止并发多个任务只执行一个任务后其他任务被销毁
*
* @typeParam R 自定义返回值类型
*
* @returns push 将异步操作加入任务队列,run 按顺序执行任务队列里的所有异步操作
*
* @example
*
* ```js
*
* const tasks = concurrentTask<MessageData[] | undefined>()
*
* for (let i = 0; i < messages.length; i++) {
* tasks.push(() => {}) // tasks.push(Promise<any>)
* }
* const res = await tasks.run()
*
* ```
*/
export declare function concurrentTask<R>(): {
push: (task: () => Promise<R>) => void;
run: () => Promise<R[]>;
};
/**
* 执行异步任务, 它会处理重复发起的任务
* @param id 任务唯一索引
* @param task 异步执行方法
*
* @example
*
* ```js
* const res = await executeAsyncTask<User>('get-user', async () => Promise<User>) // 如多次发起请求,只会请求一次
* ```
*/
export declare function executeAsyncTask<T>(id: string, task: () => Promise<T>): Promise<T>;