如何在nodejs中多次同时使用setTimeout

时间:2015-01-02 04:50:41

标签: node.js httprequest settimeout

我在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);
    }
    }
}

1 个答案:

答案 0 :(得分:1)

也许这种情况正在发生,因为timeoutinterval在全局范围内声明,然后在每个请求时覆盖它们(它们引用相同的变量)。相反,尝试使用var强制将这些变量强制转换为getVersion的函数范围:

....
var timeout = setTimeout(function() {
....
var interval = setInterval(function() {
....

我写了“也许”因为我没有测试它,但是有道理。无论如何,如果不需要,请避免使用全局范围变量