( func: T, wait: number )
| 74 | |
| 75 | // debounce an async func. once an async func canceled, it throws a exception |
| 76 | export const debounceAsyncFunc = <T extends (...args: any[]) => Promise<any>>( |
| 77 | func: T, |
| 78 | wait: number |
| 79 | ) => { |
| 80 | let timer: Timeout | undefined; |
| 81 | let previousReject: ((reason?: any) => void) | undefined; |
| 82 | |
| 83 | return function f(this: unknown, ...args: Parameters<T>): ReturnType<T> { |
| 84 | return new Promise((resolve, reject) => { |
| 85 | timer && clearTimeout(timer); |
| 86 | previousReject && previousReject(); |
| 87 | timer = setTimeout(() => resolve(func.call(this, ...args)), wait); |
| 88 | previousReject = reject; |
| 89 | }) as ReturnType<T>; |
| 90 | }; |
| 91 | }; |
| 92 | |
| 93 | type Timeout = ReturnType<typeof setTimeout>; |
nothing calls this directly
no outgoing calls
no test coverage detected