Остановка предыдущих почтовых запросов Node.js - PullRequest
0 голосов
/ 30 мая 2018

TLDR: Как настроить почтовый запрос, который каждую секунду отправляет полученные данные другому источнику, затем, когда выполняется тот же почтовый запрос, он прекращает отправку этих старых данных и начинает отправку новых данныхснова каждую секунду.

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

Мне нужен Node.js, чтобы прекратить отправку этих старых данных в очередь и вместо этого отправлять новые.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 30 мая 2018
  1. Центральное место, где вы вызываете setInterval, и сохраняйте результат setInterval.
  2. Используйте clearInterval для отмены любых предыдущих вызовов setInterval
0 голосов
/ 30 мая 2018

Вам нужно свойство, доступное из вашей логики, которое отправляет данные в Kafka.Это свойство будет служить текущим состоянием ваших почтовых данных.При первом получении сообщения вы инициируете состояние и запускаете setInterval ().После этого вам просто нужно обновить состояние, и функция внутри setInterval отправит обновленные данные.

Это будет выглядеть примерно так:

let postData;

router.post('/', function(req) {
  if(!postData) {
    //run your setInterval logic here
  } else if(req.body !== postData) {
    postData = req.body
  }
});
0 голосов
/ 30 мая 2018

У вас есть пара вариантов.

Остановите исходный объект интервального таймера, прежде чем создавать новый таймер. Когда вы так setInterval() возвращает объект таймера, который вы можете затемиспользуйте clearInterval() позже.Вы должны сохранить это.Затем, когда вы создадите свой новый интервальный таймер, вы можете вызвать clearInterval() по старому таймеру.

Держите один таймер включенным все время.Просто замените данные, которые вы отправляете. В этом случае вы просто сохраняете исходный таймер и обновляете сохраненные данные, которые собираетесь отправлять при каждом его срабатывании.Тогда у вас никогда не будет запущено несколько таймеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...