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 }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM