Throttle
Medium
Solution
export function throttle<T extends (...args: any[]) => void>(
fn: T,
t: number,
): (...args: Parameters<T>) => void {
let pending = false;
let nextArgs: Parameters<T> | undefined;
const throttled = (...args: Parameters<T>) => {
nextArgs = args;
if (pending) {
return;
}
fn(...args);
pending = true;
nextArgs = undefined;
setTimeout(() => {
pending = false;
if (nextArgs) {
throttled(...nextArgs);
}
}, t);
};
return throttled;
}