我有一个问题!
我想在网站上检测某些内容,但每次我尝试使用while循环时,标签都会冻结。我试图让while循环更慢,但每次都会冻结标签。这是Google Chrome的客户端脚本,只是为了检测4种状态之一。各州都是不同的时期。你能帮我吗?
*抱歉我的英文不好,对脚本/编程知之甚少:)
没有时间的默认代码:
while (running) {
fullStatus = checkStatus()
switch (fullStatus.substring(0, 2)) {
case "**":
rolled = true;
status = 1;
console.log("Rolling")
break;
case "Ro":
status = 2;
console.log("Prepare Bets")
break;
case "CS":
status = 3;
console.log("NumberGot")
break;
case "Co":
status = 4;
console.log("Confirming")
break;
default:
status = 0;
break;
}
答案 0 :(得分:3)
在某些时候,您必须将running
设置为false
才能让while
循环结束。
否则循环将继续运行并且浏览器冻结。
请注意break;
退出switch
语句而不是while
循环。
请注意正在执行代码时浏览器无响应。
如果while
循环的终止取决于用户交互,那么您的代码将永远不会工作(因为用户无法进行交互,因为代码执行被困在while
循环中)。
我只是猜测你想要实现的目标......
如果您必须检查状态,因为用户对页面执行操作,那么您需要一个在用户迭代时调用的回调函数(例如,单击时),而不是while
循环。一个按钮)或由计时器触发(见setTimeout()
)
我不进一步,因为这超出了问题的范围;我希望我指出你正确的方向。
答案 1 :(得分:0)
尝试间隔时间。
setInterval(function(){
fullStatus = checkStatus()
switch (fullStatus.substring(0, 2)) {
case "**":
rolled = true;
status = 1;
console.log("Rolling")
break;
case "Ro":
status = 2;
console.log("Prepare Bets")
break;
case "CS":
status = 3;
console.log("NumberGot")
break;
case "Co":
status = 4;
console.log("Confirming")
break;
default:
status = 0;
},1000);
这样,您就可以控制循环的速度。
答案 2 :(得分:0)
设置一个间隔来交错执行是根据条件修改你的代码是确定性的。目前它将循环直到时间结束,或者至少直到ram烧毁,这种实现是已知的线程阻塞,因为它占用了所有可用资源,因此不会及时重新分配以供其他应用程序使用。由于循环的状态取决于当前的运行状态,因此在某个时间点,该状态需要改变。因为break语句只退出case条件,所以你需要做的是在每个case set中运行为false,即如果case语句允许的话。