为何clearInterval无法在10秒后清除setInterval实例?
问题原因与修复方案
你的核心问题是**StartPollingServer方法没有返回setInterval生成的定时器ID**,导致变量test的值是undefined,调用clearInterval(undefined)根本无法清除定时器。
为什么会这样?
看你提供的运行代码里的StartPollingServer:
StartPollingServer: () => { setInterval(() => { MyTest.PollingServer(); }, 1000); }
这个箭头函数没有写return语句,默认返回undefined,所以var test = MyTest.StartPollingServer()执行后,test就是undefined,自然没法用来清除定时器。
修复方法
只需要给StartPollingServer加上return,把setInterval的返回值(也就是定时器唯一ID)返回出去就行:
var MyTest = MyTest || {}; MyTest = { StartPollingServer: () => { // 加上return返回定时器ID return setInterval(() => { MyTest.PollingServer(); }, 1000); }, PollingServer: () => { console.log("Polling Server"); }, StopPollingServer: (f) => { clearInterval(f); // 这里的f = null只是修改局部变量,不影响外部的test,可删可不删 } } var test = MyTest.StartPollingServer(); setTimeout(() => { MyTest.StopPollingServer(test); }, 10000);
补充说明
setInterval执行后会返回一个数字类型的定时器ID,这是系统给每个定时器分配的唯一标识,只有用这个ID才能准确清除对应的定时器- 你尝试过的两种写法其实是正确的,但实际运行的代码里没加
return,所以才会出现test为空的情况
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

