feat: added debounce delay to auto reply

reply only last message received within 3 seconds
This commit is contained in:
canove
2021-01-11 18:10:25 -03:00
parent 0a4d5a081e
commit 14c3ebe27e
2 changed files with 54 additions and 2 deletions

View File

@@ -0,0 +1,41 @@
interface Timeout {
id: number;
timeout: NodeJS.Timeout;
}
const timeouts: Timeout[] = [];
const findAndClearTimeout = (ticketId: number) => {
if (timeouts.length > 0) {
const timeoutIndex = timeouts.findIndex(timeout => timeout.id === ticketId);
if (timeoutIndex !== -1) {
clearTimeout(timeouts[timeoutIndex].timeout);
timeouts.splice(timeoutIndex, 1);
}
}
};
const debounce = (
func: { (): Promise<void>; (...args: never[]): void },
wait: number,
ticketId: number
) => {
return function executedFunction(...args: never[]): void {
const later = () => {
findAndClearTimeout(ticketId);
func(...args);
};
findAndClearTimeout(ticketId);
const newTimeout = {
id: ticketId,
timeout: setTimeout(later, wait)
};
timeouts.push(newTimeout);
};
};
export { debounce };