export function sleep(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)) } export function retry

( fn: () => Promise

, retryCount = 3, sleepTime = 1000, exponentialFactor = 1 ): Promise

{ let retry = 0 const doFn: () => Promise

= () => { return fn().catch( e => retry++ < retryCount ? (sleepTime && sleep((sleepTime *= exponentialFactor)).then(() => doFn())) || doFn() : Promise.reject(e) ) } return doFn() }