File size: 696 Bytes
c09f67c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
export async function paginate<TData>({
  fetchData,
  pageSize,
  delay,
}: {
  fetchData: (offset: number, count: number) => Promise<TData[]>;
  pageSize: number;
  delay?: { onDelay: (message: string) => void; milliseconds: number };
}): Promise<TData[]> {
  const result: TData[] = [];
  let offset = 0;
  let data: TData[] = [];

  do {
    data = await fetchData(offset, pageSize);

    result.push(...data);

    offset += pageSize;

    if (delay && data.length >= pageSize) {
      delay.onDelay(`Waiting ${delay.milliseconds / 1000} seconds`);
      await new Promise((resolve) => setTimeout(resolve, delay.milliseconds));
    }
  } while (data.length >= pageSize);

  return result;
}