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

我看了下百度现在能搜到的 无一例外都是向我们解释clearInterval的意思,没有解决根本问题!

其实这个问题本身是由于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             return;
20         }
21         //定时业务写这里,此时ajaxObj相当于某种条件,一旦条件达成则停止定时器
22     }, 1000)
23 }
24 
25 function someMethod(params) {
26     //balabala
27 }

 

posted @ 2019-09-27 10:17  五兆  阅读(1812)  评论(0编辑  收藏  举报