js timeInterval setInterval无法用clearInterval停止的问题

匿名 (未验证) 提交于 2019-12-02 21:53:52

其实这个问题本身是由于js定时器特性产生的。

clearInterval是根据定时器本身的标识来进行清除的,如果在期间生成了新的interval,并覆盖timer标识对象,旧有的timer定时器对象并不会被停止和清除,而且标识也会丢失导致再也无法被清除,所以写定时器时一定要注意。

 

下面是一个正确范例:

 1 var ajaxObj=null;//ajax异步加载的对象  2 var timer =null;  3   4 loadTimerWhenSthIsReady(params1);  5   6 ///param是外部参数,这里仅是举例  7 function loadTimerWhenSthIsReady(params) {  8     //一定要先清掉之前的定时器,如果出现两次调用的情况可能导致生成两个定时器。  9     //因为timer本身只是定时器标记并不是定时器对象,所以覆盖并不会让timer停止,旧的timer会一直执行停不下来 10     clearInterval(timer); 11     timer = null; 12  13     timer = setInterval(function () { 14         if (ajaxObj != null) { 15             clearInterval(timer); 16             timer = null; 17             //此处写业务逻辑,一旦ajaxObj 加载完毕则开始执行 18             //someMethod(params) 19         } 20         // 业务也可以写这里 21     }, 1000) 22 } 23  24 function someMethod(params){ 25     //balabala 26 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!