質問タイマが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);
}
私はあなたが供給された符号を使用して、エラーを再作成することができませんでした。おそらく、他のメソッドの1つがsetIntervalを再作成していますか? –
ここには十分な情報がありませんが、最も一般的な原因は間隔を複数回開始しているにもかかわらず、参照を1つの変数に格納していることにあります。 – JJJ
@JJJこれは私が考えたものです。たぶん私はjavascriptが変数への参照を作成する方法を理解していないでしょう。 QuestionTimerは別の関数から参照するため、グローバルとして作成しました。私は自分のコードで何が起こっているかをより良く表示するための編集を追加します。 – user3534528