export const throttle = any>( func: F, waitFor: number ): any => { const now = () => new Date().getTime(); const resetStartTime = () => (startTime = now()); let timeout: any; let startTime: number = now() - waitFor; return (...args: Parameters): Promise> => new Promise((resolve) => { const timeLeft = startTime + waitFor - now(); if (timeout) { clearTimeout(timeout); } if (startTime + waitFor <= now()) { resetStartTime(); resolve(func(...args)); } else { timeout = setTimeout(() => { resetStartTime(); resolve(func(...args)); }, timeLeft); } }); };