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;
}
|