0

インターバルごとに既に動作している関数内のインターバルを使用して時間を確認できる関数を呼び出す必要があります。インターバルで呼び出された関数でインターバルを指定して関数を呼び出すJS

var interval; 
var time = prompt("Insert amount of time in seconds"); 
function log() 
{ 
console.log ("log() called."); 
} 
function onrunning() 
{ 
    interval = setInterval(log,time*1000); 
} 
gameloop = setInterval(onrunning,5);//This interval must not cleared 

時間の最初の量が正常に動作しますが、その後、それはより速く、より速く、ブラウザがクラッシュするまでのログ()関数を呼び出しておくのです。私がやっていたしても、その 。 私はこれをやろうとしました

var interval; 
var time = prompt("Insert amount of time in seconds"); 
function log() 
{ 
console.log ("log() called."); 
} 
function onrunning() 
{ 
    interval = setInterval(log,time*1000); 
} 
gameloop = setInterval(onrunning,5); 
clearInterval(interval); //tried this but no differece. 
+1

'setInterval' - コールバックを複数回呼び出します。' setTimeout'はコールバックを1回呼び出します。そのヘルプがあるかどうかわかりません。 –

+1

「clearInterval(interval)」を正確にどこに呼び出しましたか?完全なコードに含めることができますか? – mdziekon

+0

私は 'log'を(プロンプトで与えられた)与えられた時間だけ実行して、ロギングを停止したいと思いますか?または、指示された時間が過ぎるとすぐに1回ですか? – Teemu

答えて

0

間違った場所で間隔をクリアしています。

コードでは、をクリアしてから、が作成されます(基本的にはノーオペレーションです)。

あなたは後、それはを作成されているとが実行それをクリアしたい:

function log() 
{ 
    console.log ("log() called."); 
    clearInterval(interval); 
} 

あなたのonrunningも「間隔」コールバックとして解雇されているので、あなたは新しいを作成していることにも気づくはずです各コールバック実行フレームのログ間隔。この間隔もクリアしたい場合は、上記のロジックと同じロジックを複製しますが、onrunningコールバック内に複製してください。


私はあなたが一定期間後に一度だけ(おそらく、同様にコールバック「onrunning」)「ログイン」コールバックを起動するとします。その場合はsetIntervalの代わりにsetTimeoutを使用してください。

これは、既に指摘されている。Jaromanda Xin this comment

+0

こんにちは、お返事ありがとうございます。 私はそれに似たようなことをしましたが、log()関数をより高速に呼び出すことができます。 私が望むのは、log()関数を常に時間内に呼び出すことです。 'var timeout1; var time = prompt( "時間の長さを秒単位で挿入する"); function log() { console.log( "log()"と呼びます。 clearTimeout(timeout1); } 関数onrunning() { timeout1 = setTimeout(log、time * 1000); } gameloop = setInterval(onrunning、5); ' –

+0

この場合、' 'log''間隔ではなく' 'onrunning''間隔をクリアする必要があります。すでに述べたように、 '' log''間隔をクリアするのと同じロジックを複製するだけです。 – mdziekon

関連する問題