UNPKG

@gdjiami/jslib

Version:

Jiami FrontEnd helpers and Services

75 lines (74 loc) 2.21 kB
/** * 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>;