gpt4 book ai didi

javascript - 为什么我的 clearInterval 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:49 26 4
gpt4 key购买 nike

使用node.js,我设置了一个计时器来连接TCP服务器。当它成功时,它将被清除。但是它不起作用。就像这样:

var net = require('net');
var connectTransferTick=null;

var client ;
client = new net.Socket();
function clientConnect() {
client.connect(8009, '127.0.0.1', function () {
console.log('success,clear timer');
if(connectTransferTick!=null);
{
clearInterval(connectTransferTick);
}
});
client.on('error',function()
{});
client.on('close', function () {
console.log('The server had been closed,Try to connect it again later');
if(connectTransferTick!=null)
{
console.log(clearInterval(connectTransferTick));
}
connectTransferTick = setInterval(clientConnect,1000);
});
}
clientConnect();

运行一下,你会发现定时器无法清零。

虽然,我只是将这段代码放在函数 clientConnect() 中,如下所示:

function clientConnect() {
client = new net.Socket();

计时器可以被清除。我无法解释。为什么?请帮助我。非常感谢。

最佳答案

关于使用区间标识符的一些信息/建议:

Node.js:

setInterval() 的返回值是一个对象,其中包含有关您创建的间隔的所有信息。即使在将对象作为参数调用 clearInterval() 之后,对象也不会设置为 null。您应该检查对象的 _repeat 标志以检查间隔是否正在运行。

var interval_id = setInterval(function() {  }, 10000);

if (interval_id._repeat)
{
clearInterval(interval_id);
}

客户端 javascript:

setInterval()的返回值是一个int,也就是你创建的interval的id。当您调用 clearInterval() 时,它不会取消设置存储此整数 ID 的变量。如果要将其用作间隔是否正在运行的标志,则应在调用 clearInterval() 后手动执行此操作。

var interval_id = setInterval(function() {  }, 10000);

if (interval_id)
{
clearInterval(interval_id);
interval_id = null;
}

关于javascript - 为什么我的 clearInterval 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31337140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com