| 266 | // @see: https://mottaquikarim.github.io/dev/posts/setinterval-that-blocks-on-await/ |
| 267 | export const setIntervalAsync = (target: () => Promise<void>, pollingIntervalMs: number): NodeJS.Timeout => { |
| 268 | const setIntervalWithPromise = <T extends (...args: any[]) => Promise<any>>( |
| 269 | target: T |
| 270 | ): (...args: Parameters<T>) => Promise<void> => { |
| 271 | return async function (...args: Parameters<T>): Promise<void> { |
| 272 | if ((target as any).isRunning) return; |
| 273 | |
| 274 | (target as any).isRunning = true; |
| 275 | try { |
| 276 | await target(...args); |
| 277 | } finally { |
| 278 | (target as any).isRunning = false; |
| 279 | } |
| 280 | }; |
| 281 | } |
| 282 | |
| 283 | return setInterval( |
| 284 | setIntervalWithPromise(target), |