感謝您的期待。如何在不溢出堆棧的情況下在JavaScript中編寫遞歸阻塞函數?
背景
我寫了一個客戶端一個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秒也是如此。
我在這裏做錯了什麼?
謝謝先生(或女士)!工作很好! – 2013-03-01 00:52:37
不用客氣;) – metadings 2013-03-01 00:52:55