js timeInterval setInterval无法用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         }
20         // 业务也可以写这里
21     }, 1000)
22 }
23 
24 function someMethod(params){
25     //balabala
26 }

猜你喜欢

转载自www.cnblogs.com/5MBPerSec/p/11596116.html