如何在nodejs中同时多次使用setTimeout
how to use setTimeout more than once simultaneously in nodejs
我在 node.js 中创建了一个 http 服务器,我希望在每次有请求时在特定时间后运行一个函数。我尝试为此使用 setTimeout() 。但问题是我希望多个计时器同时运行,并且每次发出新请求时 setTimeout 都会重置。任何人都可以帮助我如何做到这一点?
这是我试过的代码:
http.createServer(getVersion).listen(process.env.PORT, process.env.IP);
function getVersion(req, res) {
if (url.parse(req.url).pathname === "/") {
timeout = setTimeout(function() {
Downloadurls.find({ Downloadurl : randstring }).exec(function (err,result) {
if (err) { console.log(err) }
if (!result.length) {
Downloadurl_doc = new Downloadurls({
Downloadurl: randstring
});
Downloadurl_doc.save();
}
});
}, timeoutSeconds*1000);
interval = setInterval(function() {
console.log('Time left: '+getTimeLeft(timeout)+'s');
if (getTimeLeft(timeout) === 0)
{ clearInterval(interval);}
}, 1000);
function getTimeLeft(randstring1[i]) {
return Math.ceil((timeout._idleStart + timeout._idleTimeout - Date.now()) / 1000);
}
}
}
可能 发生这种情况是因为 timeout
和 interval
是在全局范围内声明的,然后它们在每次请求时被覆盖(它们指的是相同的变量)。相反,尝试使用 var
将这些变量强制到 getVersion
的函数范围:
....
var timeout = setTimeout(function() {
....
var interval = setInterval(function() {
....
我写"maybe"是因为没测试过,但是有道理。无论如何,如果不需要,请避免使用全局范围变量
我在 node.js 中创建了一个 http 服务器,我希望在每次有请求时在特定时间后运行一个函数。我尝试为此使用 setTimeout() 。但问题是我希望多个计时器同时运行,并且每次发出新请求时 setTimeout 都会重置。任何人都可以帮助我如何做到这一点?
这是我试过的代码:
http.createServer(getVersion).listen(process.env.PORT, process.env.IP);
function getVersion(req, res) {
if (url.parse(req.url).pathname === "/") {
timeout = setTimeout(function() {
Downloadurls.find({ Downloadurl : randstring }).exec(function (err,result) {
if (err) { console.log(err) }
if (!result.length) {
Downloadurl_doc = new Downloadurls({
Downloadurl: randstring
});
Downloadurl_doc.save();
}
});
}, timeoutSeconds*1000);
interval = setInterval(function() {
console.log('Time left: '+getTimeLeft(timeout)+'s');
if (getTimeLeft(timeout) === 0)
{ clearInterval(interval);}
}, 1000);
function getTimeLeft(randstring1[i]) {
return Math.ceil((timeout._idleStart + timeout._idleTimeout - Date.now()) / 1000);
}
}
}
可能 发生这种情况是因为 timeout
和 interval
是在全局范围内声明的,然后它们在每次请求时被覆盖(它们指的是相同的变量)。相反,尝试使用 var
将这些变量强制到 getVersion
的函数范围:
....
var timeout = setTimeout(function() {
....
var interval = setInterval(function() {
....
我写"maybe"是因为没测试过,但是有道理。无论如何,如果不需要,请避免使用全局范围变量