2

現在実行中のタイムアウトや setTimeout または setInterval で作成された間隔を確認する方法はありますか?

それぞれが ID を返すため、開発者コンソールで現在のものを表示する方法はありますか? これは、アプリケーションで「リーク」を見つけるのに役立ちます。

これを実行する唯一の方法は、setInterval/setTimeout 呼び出しのラッパーを作成することです。または、ウィンドウ内の組み込みのもの(つまりwindow.setTimeout=function())をオーバーライドしてから、オブジェクトマップを追跡します。

4

2 に答える 2

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);
  };
})();

setIntervalとに簡単に適応させることができますclearInterval

私が言いたいのは、アプリケーションでの奇妙な動作を避けるために、おそらくタイムアウトを追跡する必要があるということです...

于 2013-02-19T23:08:39.920 に答える
1

この回答に基づいて、

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

お役に立てれば!

于 2013-02-19T22:51:15.803 に答える