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
| type RetryData = {
| fn: (params?: any) => Promise<any>;
| params?: any;
| limit?: number;
| delay?: number;
| };
|
| export default function (data: RetryData): Promise<any> {
| !data.limit && (data.limit = 3);
| !data.delay && (data.delay = 50);
| return new Promise((resolve, reject) => {
| const attempt = async (): Promise<any> => {
| try {
| const res = await data.fn(data.params);
| resolve(res);
| } catch (e) {
| if (data.limit) {
| data.limit--;
| }
| if (!data.limit) {
| reject(e);
| } else {
| setTimeout(() => {
| attempt();
| }, data.delay);
| }
| }
| };
| attempt();
| });
| }
|
|