2017-04-13 6 views
0

質問があります。Google ChromeのコンソールでWhileループがクラッシュする

私はウェブサイト上で何かを検出したいと思っていますが、これを毎回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

問題は 'checkStatus'関数のためにある可能性があります – brk

+0

こんにちは、コードスニペットの一部が欠落しているようです。 'checkStatus()'は何をし、 'status'変数に関連していますか? _ "タイミングのないデフォルトコード" _ - タイミングが凍結問題に関連する場合、サンプルにそれらを含めることをお勧めします。 –

+0

これまでに実行をfalseに設定しましたか? – 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

あなたがするためにfalserunningを設定する必要がある時点でwhileループエンドにしてください。

これ以外の場合、ループは実行され続け、ブラウザはフリーズします。

break;は、whileループではなくswitchステートメントを終了します。


コード実行などは、ブラウザが応答しなくで進行中であることに注意してください。

whileループの終了がユーザーの操作に依存する場合、(コード実行がwhileループ内に閉じ込められたときにユーザーが対話できないため)コードが機能しません。

あなたは、ページ上のユーザーの行為の代わりに、あなたはそのコールバック関数が必要whileループとしてチェック状態にしている場合、私はちょうど...あなたが達成しようとしているもの

を推測していますユーザーの反復操作(ボタンのクリックなど)で呼び出されるか、タイマーによって起動されます(setTimeout()を参照)。

これは問題の範囲を超えているため、私はさらに進んでいません。私は正しい方向にあなたを指摘したいと思います。

0

インターリーブ実行間隔を設定すると、条件に基づいてコードが確定的に変更されます。現在のところ、これは時間の終わりまで、または少なくともラムが燃え尽きるまでループします。この実装は、利用可能なすべてのリソースを必要とし、他のアプリケーションが時間を割くことなく再割り当てすることがないため、スレッドのブロックと呼ばれます。ループの状態は現在の実行状態に依存するため、ある時点でその状態を変更する必要があります。 breakステートメントはケース条件を終了するだけなので、実行する必要があるのは、すべてfalseに設定されているケースです。つまり、caseステートメントで許可されている場合です。

関連する問題