/**
 * 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>;
