有没有办法查看当前运行的超时和/或使用 setTimeout 或 setInterval 创建的间隔?
由于每个都返回一个 ID,有没有办法在开发者控制台中查看当前的 ID?这将帮助我在我的应用程序中找到“泄漏”。
我现在能想到的唯一方法是为我的 setInterval/setTimeout 调用创建一个包装器。或者覆盖窗口中的内置对象(即window.setTimeout=function()
),然后让对象映射保持跟踪。
有没有办法查看当前运行的超时和/或使用 setTimeout 或 setInterval 创建的间隔?
由于每个都返回一个 ID,有没有办法在开发者控制台中查看当前的 ID?这将帮助我在我的应用程序中找到“泄漏”。
我现在能想到的唯一方法是为我的 setInterval/setTimeout 调用创建一个包装器。或者覆盖窗口中的内置对象(即window.setTimeout=function()
),然后让对象映射保持跟踪。
基于这个答案,
for (var i = 1; i < 99999; i++){
window.clearInterval(i);
window.clearTimeout(i);
}
希望这可以帮助!
我刚刚为您编写的这段代码(有趣的练习)覆盖了setTimeout
andclearTimeout
函数,并创建了跟踪全局变量中可用的超时的函数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);
};
})();
您可以轻松地将其调整为setInterval
和clearInterval
。
不过我想说的是,您可能需要跟踪超时,以避免应用程序中出现奇怪的行为......