Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| type DebouncedFunctionSync<T extends any[], R> = ((...args: T) => R) & { | |
| clear: () => void | |
| } | |
| /** | |
| * Example usage: | |
| * ```typescript | |
| * function fetchDataSync(query: string): string { | |
| * return `Results for ${query}`; | |
| * } | |
| * | |
| * const debouncedFetchDataSync = debounceSync(fetchDataSync, 300); | |
| * | |
| * try { | |
| * console.log(debouncedFetchDataSync("query 1")); // This will be ignored | |
| * console.log(debouncedFetchDataSync("query 2")); // This will be ignored | |
| * console.log(debouncedFetchDataSync("query 3")); // This will return "Results for query 3" | |
| * } catch (error) { | |
| * console.error(error); | |
| * } | |
| * ``` | |
| * | |
| * Note that the synchronous version of the debounce function will return | |
| * the result of the last function call or `undefined` if the function was | |
| * not called within the specified wait time. You should also be aware that | |
| * this synchronous version may cause blocking if the debounced function | |
| * takes a long time to execute. | |
| * | |
| * @param func | |
| * @param wait | |
| * @returns | |
| */ | |
| export function debounceSync<T extends any[], R>( | |
| func: (...args: T) => R, | |
| wait: number | |
| ): DebouncedFunctionSync<T, R | undefined> { | |
| let timeout: NodeJS.Timeout | undefined | |
| const debounced = (...args: T): R | undefined => { | |
| if (timeout) { | |
| clearTimeout(timeout) | |
| } | |
| let result: R | undefined | |
| timeout = setTimeout(() => { | |
| result = func(...args) | |
| }, wait) | |
| return result | |
| } | |
| debounced.clear = () => { | |
| if (timeout) { | |
| clearTimeout(timeout) | |
| } | |
| } | |
| return debounced | |
| } |