2

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

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

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

4

2 回答 2

1

基于这个答案

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

希望这可以帮助!

于 2013-02-19T22:51:15.803 回答
1

我刚刚为您编写的这段代码(有趣的练习)覆盖了setTimeoutandclearTimeout函数,并创建了跟踪全局变量中可用的超时的函数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

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

于 2013-02-19T23:08:39.920 回答