while循环在Google Chrome控制台

时间:2017-04-13 10:45:27

标签: javascript google-chrome

我有一个问题!

我想在网站上检测某些内容,但每次我尝试使用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;
}   

3 个答案:

答案 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语句允许的话。