import { Optional } from './type-helpers'; export type PromiseLock = { promise: Promise; resolve: () => void; }; export declare function createPromiseLock(): PromiseLock; export type CancelablePromiseCancel = (waitExecution?: boolean) => Promise; export interface CancelablePromise extends Promise { cancel: CancelablePromiseCancel; } export type MaybeCancelablePromise = Optional, 'cancel'>; export declare function pausePromise(ms: number): CancelablePromise; declare class CancelToken { protected readonly deferred: (() => Promise | void)[]; protected readonly withQueue: CancelablePromiseCancel[]; protected canceled: boolean; cancel(): Promise; defer(fn: () => Promise | void): void; with(fn: MaybeCancelablePromise): Promise; isCanceled(): boolean; } export declare function createCancelablePromise(fn: (cancel: CancelToken) => Promise): CancelablePromise; export interface CancelableInterval { cancel: (waitExecution?: boolean) => Promise; } export interface CancelableIntervalOptions { interval: number; onDuplicatedStateResolved?: (intervalId: number, elapsedTime: number) => any; onDuplicatedExecution?: (intervalId: number) => any; } /** * It helps to create an interval that can be canceled with awaiting latest execution */ export declare function createCancelableInterval(fn: (token: CancelToken) => Promise, options: CancelableIntervalOptions): CancelableInterval; interface RetryWithTimeoutOptions { timeout: number; intervalPause: (iteration: number) => number; } export declare const withTimeout: (fn: (...args: any[]) => void, timeout: number) => CancelablePromise; export declare const withTimeoutRace: (fn: CancelablePromise, timeout: number) => Promise; export declare const retryWithTimeout: (fn: (token: CancelToken) => Promise, { timeout, intervalPause }: RetryWithTimeoutOptions) => Promise; export type AsyncDebounceOptions = { max?: number; ttl?: number; }; export declare const asyncDebounceFn: (fn: (...args: Arguments[]) => Promise, options?: AsyncDebounceOptions) => (...args: Arguments[]) => Promise; export type MemoizeOptions = { extractKey: (...args: Arguments[]) => string; extractCacheLifetime: (result: Ret) => number; }; export declare const asyncMemoize: (fn: (...args: Arguments[]) => Promise, options: MemoizeOptions) => { (...args: Arguments[]): Promise; force(...args: Arguments[]): Promise; }; export type BackgroundMemoizeOptions = { extractKey: (...args: Arguments[]) => string; extractCacheLifetime: (result: Ret) => number; backgroundRefreshInterval: number; onBackgroundException: (err: Error) => void; }; export declare const decorateWithCancel: void>(fn: Promise, cancel: C) => CancelablePromise; export declare const asyncMemoizeBackground: (fn: (...args: Arguments[]) => Promise, options: BackgroundMemoizeOptions) => { (...args: Arguments[]): Promise; force(...args: Arguments[]): Promise; release: (waitExecution?: boolean) => Promise; }; export type RetryOptions = { times: number; }; /** * High order function that do retry when async function throw an exception */ export declare const asyncRetry: (fn: () => Promise, options: RetryOptions) => Promise; export {}; //# sourceMappingURL=promises.d.ts.map