2013-02-19 42 views
1

有什么方法可以查看当前正在运行的超时和/或使用setTimeout或setInterval创建的时间间隔吗?寻找剩余setTimeouts和setInterval

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

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

+0

我认为一个更好的方法来找到造成的setTimeout“泄漏”/Interval将在JS堆快照的单独部分中显示它们,而不是在开发人员控制台中提供它们的列表。 – 2013-02-22 06:43:49

回答

1

基于this answer

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

希望这有助于!

+0

@ K2xL:是的,基于这里给出的链接,可能会尝试重写setTimeout/setInterval,然后如果运行时间过长,则使用行#'(new Error).lineNumber'触发错误 – 2013-02-19 23:04:16

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

我想,虽然说的是,你可能需要保持跟踪你的超时,以避免在您的应用程序怪异的行为...