感谢您的关注。
背景
我正在为客户端编写一个重 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 seconds,我也会立即发生堆栈溢出。这是 Chrome 给我的:
“超出最大调用堆栈大小。”
如果您查看堆栈,即使 setTimeOut 设置为 10 秒,该函数也似乎在一两毫秒内被调用了几十次。
我在这里做错了什么?