查找Leftover setTimeouts和setIntervals

时间:2013-02-19 22:15:06

标签: javascript google-chrome firebug google-chrome-devtools

有没有办法查看使用setTimeout或setInterval创建的当前正在运行的超时和/或间隔?

由于每个人都返回一个ID,有没有办法在开发者控制台中查看当前的ID?这可以帮助我在我的应用程序中找到“泄漏”。

现在我能想到的唯一方法是为我的setInterval / setTimeout调用创建一个包装器。或者在窗口中覆盖内置的(即window.setTimeout=function()),然后让对象图跟踪。

2 个答案:

答案 0 :(得分:1)

基于this answer

for (var i = 1; i < 99999; i++){
   window.clearInterval(i);
   window.clearTimeout(i);
}

希望这有帮助!

答案 1 :(得分:1)

我刚刚为您编写的这段代码(有趣的练习)会覆盖setTimeoutclearTimeout函数,并创建一个跟踪名为timeouts的全局变量中可用的超时的代码。在jsfiddle上试试:http://jsfiddle.net/KqZmb/

(function() {
  window.timeouts = [];
  var _setTimeout = window.setTimeout;
  window.setTimeout = function() { 
    var id = _setTimeout.apply( this, arguments );
    timeouts.push( id );
    _setTimeout( function() {
        timeouts.splice( timeouts.indexOf( id ), 1);
      }, arguments[1] );
     return id;
  };
  var _clearTimeout = window.clearTimeout;
  window.clearTimeout = function( id ) { 
    _clearTimeout( id );
    timeouts.splice( timeouts.indexOf( id ), 1);
  };
})();

您可以轻松地对setIntervalclearInterval进行调整。

我想说的是你可能需要跟踪你的超时,以避免应用程序中的奇怪行为......