Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的clearInterval不能工作?

为什么我的clearInterval不能工作?
EN

Stack Overflow用户
提问于 2015-07-10 09:24:04
回答 3查看 2.3K关注 0票数 4

使用node.js,我设置了一个计时器来连接TCP server.when it成功,它将是cleared.However it server.when work.just像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()中,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function clientConnect() {
    client = new net.Socket();

定时器可以清除我不能解释it.why?请多多帮助me.Thanks。

EN

回答 3

Stack Overflow用户

发布于 2015-07-10 10:01:57

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

Node.js:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var interval_id = setInterval(function() {  }, 10000);

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

客户端javascript:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var interval_id = setInterval(function() {  }, 10000);

if (interval_id)
{
    clearInterval(interval_id);
    interval_id = null;
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-10 09:34:39

我认为这是因为setInterval是在套接字连接关闭时调用的,但是您试图在套接字第一次打开时更早地取消间隔。

因此,当您调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clearInterval(connectTransferTick)

在这一点上connectTransferTick仍然是null,因为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
connectTransferTick = setInterval()

还没有发生。

票数 0
EN

Stack Overflow用户

发布于 2015-07-10 09:50:03

因为当满足close时,它将导致至少再次调用clientConnect,并向客户端注册另一个onclose。因此,每次满足关闭时,您注册了更多的setInterval,而您只能清除最新的。

所以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function clientConnect() {
    client = new net.Socket();

之所以有效,是因为您创建了一个新套接字,而它还没有定义onclose处理程序,所以它不会多次执行setInterval

因此,您应该使用一个标志来防止多次注册事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var net = require('net');
var connectTransferTick=null;

var client ;
client = new net.Socket();
function clientConnect(isInited) {
    client.connect(8009, '127.0.0.1', function () {
        console.log('success,clear timer');
        if(connectTransferTick!=null);
        {
            clearInterval(connectTransferTick);
        }
    });

    // Prevent events registered many times.
    if (!isInited) {
        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));
            }
            // Pass a flag to the clientConnect
            connectTransferTick = setInterval(clientConnect,1000, true);
        });    
    }

}
clientConnect();

另外,我认为setTimeout应该足以处理这个问题?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var net = require('net');

var client ;
client = new net.Socket();
function clientConnect(isInited) {
    client.connect(8009, '127.0.0.1', function () {
        console.log('success,clear timer');
    });

    // Prevent events registered many times.
    if (!isInited) {
        client.on('error',function(){});
        client.on('close', function () {
            console.log('The server had been closed,Try to connect it again later');
            connectTransferTick = setTimeout(clientConnect,1000, true);
        });    
    }

}
clientConnect();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31337140

复制
相关文章
为什么我退出了编程工作
从很小的时候就在印度出生和成长,在那里我们只有少数的职业选择。工程师和医生是很多人的头两个选择。现在,随着互联网的兴起,事情正在发生变化,但是父母期望孩子成为医生或工程师的情况并不少见。
程序那些事儿
2023/03/07
3150
为什么我退出了编程工作
setInterval()与clearInterval()的用法
setInterval() 方法可按照指定的周期来调用函数或计算表达式。  --简单地说就是过一段时间调用一次该函数 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。代码演示如下 var backId=setInterval("aaa()",1000); $('.aaa').mouseover(function(){ clearInter
郑小超.
2018/01/24
1.8K0
HTML DOM clearInterval() 方法
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
全栈程序员站长
2022/07/07
5800
我为什么要创建一个不能被实例化的类
Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。为了保留多继承的优点,但又摒除缺点,于是有了混入这种编程模式。
青南
2020/04/08
3.4K0
我为什么要创建一个不能被实例化的类
HTML DOM clearInterval() 方法
clearInterval() 方法可取消由 setInterval() 设置的 timeout。 clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
一个会写诗的程序员
2018/08/17
9760
OGG的PURGEOLDEXTRACTS不能工作问题的解决
PURGEOLDEXTRACTS /ogg/dirdat/horcl/hz*,USECHECKPOINTS,MINKEEPDAYS 2
星哥玩云
2022/08/17
8410
为什么我不建议你通过 Python 去找工作?
这是读者“前进一点”在微信上问我的一个问题,我当时给他的回复是“Python 挺火的,学 Python 就好。”但当我在 B 站上看了羊哥的一期视频后,深感懊悔,觉得自己给出的建议是不负责任的。
黄啊码
2022/06/20
2.8K0
为什么我不建议你通过 Python 去找工作?
这是读者“前进一点”在微信上问我的一个问题,我当时给他的回复是“Python 挺火的,学 Python 就好。”但当我在 B 站上看了羊哥的一期视频后,深感懊悔,觉得自己给出的建议是不负责任的。
沉默王二
2020/05/26
2.7K0
setTimeout实现setInterval和clearInterval[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4930
为什么我要拒绝梦寐以求的数据科学家工作?
在深入探讨这个问题前,让我们退后一步,先试着回答另一个问题:为什么要成为数据科学家?
CDA数据分析师
2018/10/25
9350
为什么我要拒绝梦寐以求的数据科学家工作?
setInterval与clearInterval使用示例
setInterval是一个很有用的js函数,可以用来重复执行某些功能,利用这个我们可以实现一些很有趣的功能,比如: 不刷新页面的情况下,"实时"获取其它会员给你发来的问候,并弹出显示之类 下面给一个示例代码:(里面用了一些jquery的方法) Code <html> <head> <title>jquery 操作 Select</title> <script type="text/javascript" src="jquery-1.2.6.pack.js"></script> <script type
菩提树下的杨过
2018/01/23
1.6K0
躺着办公这么快乐,为什么我是还想回公司工作?
今天是小N在家办公的第八天 办公姿势:躺着 办公位置:床上 实现了零距离通勤 起床就已经到达工位 说起来这个办公位置, 大家晒出来的环境真是五花八门: 拿鞋盒子抬高电脑工作的 用洗衣机当办公桌的 还有在大树下园林式办公的 一边听着鸡鸣声一边工作的 还有拿着手机 全村跑着找wifi信号连网开视频会议的 想象中的在家办公和实际确实有所不同 除了”配置环境“以外 在家办公遇到的阻碍还有很多: 01 猫大爷 离开电脑去上个洗手间, 猫把电脑当做红毯 优雅地从上面上走过,
腾讯NEXT学位
2020/02/24
5430
躺着办公这么快乐,为什么我是还想回公司工作?
我用编程模拟疫情的传播来告诉你: 为什么现在的你还不能出门
暂时还不要流动! 还不到时候! 请告诫身边人: 不要流动! 不要流动!! 不要流动!!! 还没有到真正的时候。 本视频以数据可视化 非常直观地告诉我们疫情的传播与爆发过程 希望每个人都能点进去看
我被狗咬了
2020/02/19
2.1K0
我用编程模拟疫情的传播来告诉你: 为什么现在的你还不能出门
为什么OpenAI不能被计划?
然而,没有人说,OpenAI最初所做的这一切,注定要迎来AI的「iPhone时刻」。
新智元
2023/09/09
1660
为什么OpenAI不能被计划?
对不起,我的健康码不能给你
题图摄于广州番禺 本文记录一次关于隐私保护的事情。 近日,我去了趟某运营商的营业厅,开通一个新的手机号。入门时,扫了场所码,显示的是绿码。 营业员在帮我办理业务时,除了拍照我的身份证件外,还说要留存我的健康码和行程码。 这个要求就有点奇怪了,尽管我两个码都是正常,但作为从事隐私信息保护工作的我,对涉及自己隐私数据的事情,觉得还是要和他掰斥一下。 首先,我问他为什么需要留存我的两码?因为这两个码是用于防疫的,与办理手机业务没啥关系,他们也不是卫生防疫部门。 营业员理直气壮地说,这是他们的业务流程规定的。因为我
Henry Zhang
2023/04/04
4050
对不起,我的健康码不能给你
每次不能把工作干好的时候,就看看
软件蚕食一切。未来属于程序员。所以人人都想当程序员。但是并不是每个人都能当好程序员。在你做出决定前还是先看看自己能不能当好程序员吧。可是什么样的人不适合当程序员呢?不要喝鸡汤,我们看看 Quora 上面是如何回答的。 在全栈开发者 Adam Leffert 看来,最重要的是态度: 我认为编程要想成功最重要的是态度。当然,最低水平的智力还是要的。以我这么久的经验来看,还没见过蠢到不会做的。 但是好坏程序员之间的差别几乎永远是态度。 耐心:对我来说这是最重要的一条。写代码和调试极其令人沮丧。要想做好,你得保持冷
前朝楚水
2018/04/02
6900
我的前端工作流
在 Node.js 出现以前,以往的前端开发工作属于石器时代。而随着前端技术的大爆炸来临,我们需要赶上这一次潮流,加入到前端开发到摩登时代去。这篇博文主要是记录如何构建前端工作流。
零式的天空
2022/03/22
6310
扶我起来,前端还没倒下,我不能睡
长路漫漫,唯夜作伴。虽然一天的工作头昏脑胀,但是仍然放不下我心心念念的前端啊,扶我起来,我还可以学~
小闫同学啊
2019/12/17
8310
点击加载更多

相似问题

为什么我的clearInterval不能工作?

58

为什么clearInterval不能工作

31

为什么clearInterval()不能正常工作?

11

为什么我的React中的clearInterval不能工作?

130

为什么clearInterval不能在我的代码上工作?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文