TLDR:如何设置post请求,每秒将接收的数据发送到另一个源,然后当发出相同的post请求时,它停止发送旧数据,并开始每秒再次发送新数据。
我有一个运行Express的Node.js服务器。每次客户端向我的某个路由发出post请求时,我每秒(使用setInterval)向Apache Kafka队列发送数据。当向我的服务器发出新的post请求时,它会创建该setInterval函数的一个新实例,并实际每秒发送新数据和旧数据。
我需要Node.js停止向队列发送旧数据,改为发送新数据。
有什么想法吗?
发布于 2018-05-30 08:00:52
您需要一个可从您的逻辑访问的属性,用于将数据发送到Kafka。该属性将用作帖子数据的当前状态。第一次收到帖子时,您将初始化状态并运行setInterval()。之后,您只需更新状态,setInterval内部的函数将发送更新后的数据。
它看起来像这样:
let postData;
router.post('/', function(req) {
if(!postData) {
//run your setInterval logic here
} else if(req.body !== postData) {
postData = req.body
}
});
发布于 2018-05-30 07:50:08
你有几个选择。
在创建新的timer之前停止原来的interval timer对象。当您使用setInterval()
时,它将返回一个timer对象,您可以在以后对该对象使用clearInterval()
。你得把它保存起来。然后,当您要创建新的间隔计时器时,可以在旧计时器上调用clearInterval()
。
让一个定时器一直在运行。只需替换您要发送的数据。在这种情况下,您只需保持原始计时器运行,并更新每次触发时要发送的存储数据。然后,您永远不会运行多个计时器。
发布于 2018-05-30 07:50:29
https://stackoverflow.com/questions/50594381
复制相似问题