我正在构建这个应用程序,用户可以在其中运行setInterval中的函数包装器。我已将用户添加到api路径,但是我仍然得到随机结果,脚本无法按预期清除间隔,它仅适用于单个路由/用户/参数,请有人帮忙吗?
您可以通过访问
来运行以下代码http://localhost:1403/api/v1/user1/random.com?running=true&user=user1&url=random.com
const express = require('express')
const app = express()
const port = 1403
app.get('/api/v1/:user/:url', (request, response) => {
var user = request.query.user;
var url = request.query.url;
if (request.query.running === 'false') {
clearInterval(timer);
console.log("Thread stopped for "
+ user + ' - url : ' + url);
} else {
console.log("Thread started for "
+ user + ' - url : ' + url);
timer = setInterval(
function apiCall() {
console.log("api called - thread running for "
+ user + ' - url : ' + url);
}, 2000);
}
response.sendStatus(200);
})
app.listen(port, () => console.log(`App running on port ${port}!`))
我的最初目标是通过发送与启动该功能相同的参数来停止正确的功能,然后设置running=false
。它似乎不起作用,因为此逻辑中缺少某些内容。让我知道我是否正确解释了问题
答案 0 :(得分:1)
如果我对您的问题的理解是正确的,那么您正在使用单个timer
变量(这是偶然的全局变量,因为未声明)。这将被最新的intervalId
覆盖。
这就是为什么在进行单个请求时它可以正常工作的原因。
尝试将intervalIds
添加到类似对象中
//at the top
let timers = {};
//in route - to add interval execution
timers[user] = setInterval(...);
//in route - to clear the timer
clearInterval(timers[user]);