|
export function bufferWatchEvents<T extends unknown[]>(timeInMs: number, cb: (events: T[]) => unknown) { |
|
let timeoutId: number | undefined; |
|
let events: T[] = []; |
|
|
|
|
|
let processing: Promise<unknown> = Promise.resolve(); |
|
|
|
const scheduleBufferTick = () => { |
|
timeoutId = self.setTimeout(async () => { |
|
|
|
await processing; |
|
|
|
if (events.length > 0) { |
|
processing = Promise.resolve(cb(events)); |
|
} |
|
|
|
timeoutId = undefined; |
|
events = []; |
|
}, timeInMs); |
|
}; |
|
|
|
return (...args: T) => { |
|
events.push(args); |
|
|
|
if (!timeoutId) { |
|
scheduleBufferTick(); |
|
} |
|
}; |
|
} |
|
|