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