Если вы счастливы игнорировать второе поступающее сообщение, вы можете посмотреть, как обернуть вашу функцию с помощью debouncing , что приведет к ее срабатыванию только один раз при вызове в короткой последовательности.
Loda sh имеет пакет для этого, который можно импортировать по отдельности
import { myFunc } from 'somewhere';
import { debounce } from 'somewhereElse';
const DEBOUNCE_DELAY_MS = 500;
const myDebouncedFunc = debounce(myFunc, DEBOUNCE_DELAY_MS);
// Call myDebouncedFunc twice immediately after each other, the
// debouncing will result in the function only getting called max once
// every 500ms;
myDebouncedFunc();
myDebouncedFunc();
В противном случае, если вам нужно обработать оба сообщения, только не одновременно, тогда вам нужно что-то вроде очереди для обработки этих событий. Затем вы можете обработать эти сообщения, например, с интервалом.
// Some lexically available scope
const myQueue = [];
// Event handler
const myHandler = (msg) => {
myQueue.push(msg);
}
// Interval processing
setInterval(() => {
if (myQueue.length > 0) {
const msgToProcess = myQueue.shift();
processMessage(msgToProcess);
}
}, 500)