ご覧いただきありがとうございます。
バックグラウンド
クライアント用に JavaScript を多用するアプリを作成しており、条件とコールバック関数を渡すことができるユーティリティ関数が必要です。条件が満たされない場合は、数ミリ秒待ってから再度テストする必要があります。条件が満たされた場合、コールバックを実行します。
私がこれまでに持っているもの
このメソッドをユーティリティ クラスの一部として記述しました。
ThreadLocker: function (condition, callback) {
//If condition is true then it resumes running code
if (condition()) {
callback();
} else { //Else it waits 10ms and tries again
setTimeout(Util.ThreadLocker(condition,callback), 10);
}
}
使用方法は次のとおりです。
var condition = function(){return (myGlobalVariable == "foo") ? true : false;};
var callback = function(){alert("Ready to rock!");};
Util.Threadlocker(condition,callback);
問題
タイムアウト期間を 10秒に設定しても、すぐにスタック オーバーフローが発生します。これがChromeが私に与えるものです:
「コール スタックの最大サイズを超えました。」
スタックを見ると、setTimeOut が 10 秒に設定されていたとしても、1 ミリ秒または 2 ミリ秒の間に関数が数十回呼び出されたように見えます。
ここで何が間違っていますか?