2017-07-02 2 views
0

質問タイマが0より小さくなっても、以下の関数はclearIntervalを呼び出さない場合があります。私のコンソールは0 ..- 1 ..- 2..etcを報告します。条件を満たしていてもタイマーを止めません。これはsocket.ioを使用しているので、ランダムに発生するようなタイミング問題であるかどうかはわかりません。setInterval変数はsocket.io Webゲームで停止しません

EDIT:このコードは、2つの異なる場所から呼び出される関数内にあります。 var questionTimerは別の関数で使用するため、app.jsファイルでグローバルに宣言されています。 clearIntervalが呼び出される前にquestionBeginCountdownが再度呼び出された場合、setIntervalの2つのインスタンスが実行されていることを意味します(つまり、setIntervalの最初のインスタンスはclearIntervalを呼び出しますが、questionTimerの戻り値は異なるため)。

function questionBeginCountdown() 
{ 
questionTimer = setInterval(function() { 
      questionTimerCount--; 
      playerSpc.emit('update interval', questionTimerCount); 
      gameSpc.emit('update interval', questionTimerCount); 
      guestHost.emit('update interval', questionTimerCount); 
      console.log('timer count: ' + questionTimerCount); 
      if (questionTimerCount <= 0) { 
       console.log('stopping timer.'); 
       clearInterval(questionTimer); 
       questionTimesUp(); //calls a function that emits various things 
      } 
     }, 1000); 
} 
+0

私はあなたが供給された符号を使用して、エラーを再作成することができませんでした。おそらく、他のメソッドの1つがsetIntervalを再作成していますか? –

+1

ここには十分な情報がありませんが、最も一般的な原因は間隔を複数回開始しているにもかかわらず、参照を1つの変数に格納していることにあります。 – JJJ

+0

@JJJこれは私が考えたものです。たぶん私はjavascriptが変数への参照を作成する方法を理解していないでしょう。 QuestionTimerは別の関数から参照するため、グローバルとして作成しました。私は自分のコードで何が起こっているかをより良く表示するための編集を追加します。 – user3534528

答えて

0

てclearIntervalはそれはのsetIntervalランニング2つの別々のインスタンスがある意味でしょう呼び出される前にquestionBeginCountdownが再び呼び出された場合は?

私はそう信じています。たぶん、あなたがなぜそれを2度と呼んでいるのか考え直しましょう。

1つのクイックフィックスは、within questionBeginCountdownは、intervalを設定する前にquestionTimerが既に設定されているかどうかを確認します。その後、タイマーが終了した後、そして間隔をクリアした後に、ラインの下のどこかにquestionTimerをnullに設定します。

お互いに独立したタイマーが2つ必要な場合は、questionBiminCountをquestionBiminCountdownにローカルに設定することもできますが、これはタイマーで何をしているかによって異なります。

編集

私が言ったことの一例。

let questionTimer, 
 
    questionTimerCount = 2; 
 
function questionBeginCountdown() 
 
{ 
 
    if (questionTimer) 
 
    return 
 
    
 
    questionTimer = setInterval(function() { 
 
      questionTimerCount--; 
 
      //playerSpc.emit('update interval', questionTimerCount); 
 
      //gameSpc.emit('update interval', questionTimerCount); 
 
      // guestHost.emit('update interval', questionTimerCount); 
 
      console.log('timer count: ' + questionTimerCount); 
 
      if (questionTimerCount <= 0) { 
 
        console.log('stopping timer.'); 
 
        clearInterval(questionTimer); 
 
        //questionTimesUp(); 
 
        questionTimer = null; 
 
       } 
 
      }, 1000); 
 
} 
 

 
// calling it 4 times doesn't set 4 intervals 
 
questionBeginCountdown(); 
 
questionBeginCountdown(); 
 
questionBeginCountdown(); 
 
questionBeginCountdown();

+0

ありがとう私はこれを行います! – user3534528

関連する問題