Spaces:
Paused
Paused
| /** | |
| * Custom throttle function that allows the first call to go through immediately | |
| * and then limits subsequent calls. | |
| * @param func - The function to throttle. | |
| * @param limit - The minimum time between function calls in milliseconds. | |
| * @returns A throttled version of the function. | |
| */ | |
| export function throttle<T extends (...args: any[]) => any>(func: T, limit: number): T { | |
| let lastCall = 0; | |
| let timeoutId: NodeJS.Timer | null = null; | |
| return function (this: any, ...args: Parameters<T>) { | |
| const context = this; | |
| const now = Date.now(); | |
| if (now - lastCall >= limit) { | |
| if (timeoutId !== null) { | |
| clearTimeout(timeoutId); | |
| timeoutId = null; | |
| } | |
| lastCall = now; | |
| return func.apply(context, args); | |
| } else if (!timeoutId) { | |
| timeoutId = setTimeout(() => { | |
| lastCall = Date.now(); | |
| timeoutId = null; | |
| func.apply(context, args); | |
| }, limit - (now - lastCall)); | |
| } | |
| } as T; | |
| } | |