TL; DR: Как настроить почтовый запрос, который отправляет полученные данные каждую секунду в другой источник, а затем, когда тот же самый почтовый запрос сделан, он прекращает отправку этих старых данных и снова начинает отправлять новые данные каждую секунду.
У меня есть сервер Node.js, работающий с Express. Каждый раз, когда клиент отправляет почтовый запрос на один из моих маршрутов, я каждую секунду отправляю данные (используя setInterval) в очередь Apache Kafka. Когда на мой сервер отправляется новый почтовый запрос, он создает новый экземпляр этой функции setInterval и фактически отправляет как новые данные, так и старые данные каждую секунду.
Мне нужно, чтобы Node.js перестал отправлять старые данные в очередь и вместо этого отправил новые.
Любые идеи?





У вас есть пара вариантов.
Прежде чем создавать новый таймер, остановите исходный объект интервального таймера. Когда вы это делаете, setInterval() возвращает объект таймера, с которым вы можете использовать clearInterval() позже. Тебе нужно это сохранить. Затем, когда вы перейдете к созданию нового интервального таймера, вы можете вызвать clearInterval() на старом таймере.
Держите один таймер постоянно включенным. Просто замените данные, которые вы отправляете. В этом случае вы просто поддерживаете работу исходного таймера и обновляете сохраненные данные, которые вы собираетесь отправлять каждый раз, когда он срабатывает. Тогда у вас никогда не получится запустить несколько таймеров.
@ stark0323 - Если это ответ на ваш вопрос, вы можете сообщить об этом сообществу, щелкнув галочку слева от ответа.
Вам нужно свойство, доступное из вашей логики, которое отправляет данные в Kafka. Это свойство будет служить текущим состоянием ваших данных публикации. В первый раз, когда вы получите сообщение, вы инициируете состояние и запустите setInterval (). После этого вам просто нужно обновить состояние, и функция внутри setInterval отправит обновленные данные.
Это будет выглядеть примерно так:
let postData;
router.post('/', function(req) {
if (!postData) {
//run your setInterval logic here
} else if (req.body !== postData) {
postData = req.body
}
});
@ stark0323 - Вот в чем дело. Покажите нам свой ФАКТИЧЕСКИЙ код, и мы сможем вам помочь. Когда вы создаете теоретические вопросы, в которых вы сначала не раскрываете реальную проблему, а затем продолжаете дополнять свой вопрос, я просто решаю, что не стоит преследовать движущуюся цель вопроса. В будущем вы должны указать свой НАСТОЯЩИЙ КОД в вопросе с самого начала, и этого не произойдет. К вашему сведению, это все еще кажется несложным. Когда у вас есть данные (когда они есть), вы можете хранить их глобально для использования
setInterval().