TLDR:如何设置发送请求,每秒将接收到的数据发送到另一个源,然后在发出相同的发布请求时,它会停止发送旧数据并开始发送新数据数据每秒一次。
我有一个运行Express的Node.js服务器。每当客户端向我的一个路由发出post请求时,我每秒(使用setInterval)将数据发送到Apache Kafka队列。当向我的服务器发出新的post请求时,它会创建该setInterval函数的新实例,并实际每秒发送新数据和旧数据。
我需要Node.js停止将旧数据发送到队列并发送新数据。
有什么想法吗?
答案 0 :(得分:0)
你有几个选择。
在创建新计时器之前停止原始间隔计时器对象。当您setInterval()
它返回一个计时器对象时,您可以稍后使用clearInterval()
。你需要保存它。然后,当您创建新的间隔计时器时,可以在旧计时器上调用clearInterval()
。
让一个计时器一直在运行。只需替换您要发送的数据。在这种情况下,您只需保持原始计时器的运行,并更新每次触发时要发送的存储数据。然后,你永远不会最终运行多个计时器。
答案 1 :(得分:0)
答案 2 :(得分:0)
您需要一个可从您的逻辑中访问的属性,以便将数据发送到Kafka。该属性将作为您的发布数据的当前状态。第一次收到帖子时,您将启动状态并运行setInterval()。之后你只需要更新setInterval中的状态和函数就会发送更新的数据。
它看起来像那样:
let postData;
router.post('/', function(req) {
if(!postData) {
//run your setInterval logic here
} else if(req.body !== postData) {
postData = req.body
}
});