2017-04-13 166 views
0

我有一个问题!While循环在Google Chrome控制台中不断崩溃

我想检测一个网站上的东西,但每次我试着这个while-loop选项卡是冻结。我试图让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

这个问题可能是由于'checkStatus'函数 – brk

+0

嗨,好像你的代码段的一些部分丢失了。 'checkStatus()'做了什么,它和'status'变量有关? _“没有时间的默认代码”_ - 当计时与冻结问题相关时,将它们包含在样本中可能是一个好主意...... –

+0

那么你有没有设置跑步假? – epascarello

回答

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); 

这样,您可以控制循环的速度。

+0

现在它工作了!谢谢! – s3rv3r

3

在某些时候你必须按顺序设置runningfalse到让while循环结束。

否则,循环将继续运行,并且浏览器会冻结。

请注意,break;退出switch声明而不是while循环。


注意代码在执行过程中的浏览器没有反应

如果while循环的终止取决于用户交互那么你的代码将永远不会工作(因为作为代码执行被困在while循环内的用户不能进行交互)。

我只是猜测你想达到什么目的?

如果你有检查状态作为用户行为的页面上,然后代替while循环,你需要一个回调函数,当用户迭代(例如按钮的点击)时被调用或者被定时器触发(参见setTimeout()

我不会进一步讨论,因为这超出了问题的范围;我希望我指出你正确的方向。

0

设置间隔交错执行是修改您的代码是基于条件的确定性。目前它会循环直到时间结束,或者至少直到ram烧毁,这个实现是已知的线程阻塞,因为它占用了所有可用的资源,并且因此不能及时地重新分配其他应用程序以适应其他应用程序。由于循环的状态取决于当前的运行状态,因此在某个时间点该状态需要更改。因为break语句只存在一个case条件,所以你需要做的是在每一个case set中运行false,也就是说,如果case语句允许的话。