[英]Stoping a function in a node server from the front-end
我正在构建这个应用程序,每个用户都可以在我的node.js服务器中执行一个函数,该函数是一个循环,可继续运行和更新数据库。 我的目标是找到一种方法来停止用户执行的功能,让您对已经实现的逻辑有所了解,请参见下面的代码:
app.get('/api/v1/', cors(), (request, response) => {
let timer = setInterval(apiCall, interval);
if (request.query.running === false) {
clearInterval(timer);
}
function apiCall(i) {
webshot(url, 'public/' + filename, options, function (err) {
if (err) { console.log(err) }
});
}
})
我打算发送一个带有running = false的API调用来停止它,但它似乎不起作用,它只是创建了另一个线程
您的方法有效,并且在逻辑上进行了一些改进和更改:
timer
变量的范围应该是整个Web进程。 如果在函数内部声明它,则松散它的引用以供以后在clearInterval
。 setInterval
必须在else子句中,否则您将取消它并在同一调用中再次启动它。 interval
变量。 我将其更改了2秒钟。 对此进行更改后,您的示例将起作用。 看看这个:
var express = require('express');
var app = express();
var timer;
function apiCall(i) {
console.log("api called " + Date());
}
app.get('/api/v1/', (request, response) => {
if (request.query.running === 'false') {
clearInterval(timer);
console.log('Timer stopped');
} else {
console.log('Timer started');
timer = setInterval(apiCall, 2000);
}
response.send(200);
})
app.listen(3000);
当然,此解决方案有一个问题:它无法区分用户调用:这意味着,如果多个用户调用您的API端点,则所有这些用户都将与同一个计时器进行交互。 如果您希望每个用户使用不同的计时器,则必须在api中添加逻辑以检测哪个用户进行了调用,当然每个用户都有一个不同的计时器。 最简单的方法是在API调用中添加一个名称: /api/v1/john/
,而不是使用timer
变量,而是为每个用户使用计时器变量进行映射。 问候!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.