Timer系のデバック方法を考えてみた。

setTimeoutやsetIntervalで関数を実行するとthrowされた値がキャッチできない。そこで下記のように関数を上書きするだけでthrowがキャッチできる。(console.errorは javascriptのデバック方法に依存するのでお好みのコードに置き換えて使えばOK)

  • 使い方
    • catchした後の処理はお好みのコードに差し替え。
    • できるだけ早く以下のコードが実行されるようにする。
    • あとは、いつも通りのコーディングでOK.
(function(){// debug.
  // setTimeout
  var _setTimeout=window.setTimeout;
  window.setTimeout=function( func, ms ){
    func = ( typeof func == 'function' )?func:new Function(func);
    return _setTimeout( function(){
      try{
        func();
      }catch(e){
        console.error('an exception caught in setTimeout.',func,e);
        throw e;
      }
    }, ms );
  };
  
  // setInterval
  var _setInterval=window.setInterval;
  window.setInterval=function( func, ms ){
    func = ( typeof func == 'function' )?func:new Function(func);
    return _setInterval( function(){
      try{
        func();
      }catch(e){
        console.error('an exception caught in setInterval.',func,e);
        throw e;
      }
    }, ms );
  };
})();