forked from jd-carroll/cfn-response-async
-
Notifications
You must be signed in to change notification settings - Fork 0
/
retry.ts
40 lines (34 loc) · 876 Bytes
/
retry.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
export interface RetryOptions {
retries?: number;
delay?: number;
count?: number;
}
const defaultOptions: RetryOptions = {
retries: 3,
delay: 500,
count: 0
};
/**
* Use the setTimeout to delay retry
*/
const delay = (options: RetryOptions) => {
return new Promise(resolve => setTimeout(resolve, options.delay! * options.count!));
};
/**
* This run the lib
* Receive the promiseFn
*/
export const retry = <T>(requestFn: () => Promise<T>, options = defaultOptions): Promise<T> => {
// const optionsParsed = buildOptionsParsed(options);
// const { onRetry, shouldRetry } = optionsParsed;
const promise = requestFn();
return promise.catch((err: any) => {
if (options.count!++ < options.retries!) {
return delay(options).then(() => {
return retry(requestFn, options);
});
}
throw err;
});
};
export default retry;