2017-11-03 10 views
-1

私はいくつかのQを見たことがあります&私は理解しようとしているものに似ていますが、私を本当に助けてくれていません。私がやりたいと思ってる何Javascript:function1をx秒間実行し、次にfunction2をy秒間実行してから、無限に繰り返す方法はありますか?

はこれです:

function1(); //for 9 seconds 
stop.function1(); 
function2(); //for 1 second 
stop.function2(); 

そして、無限にこれを繰り返します。私は、タイムアウトと間隔でさまざまな方法を試しましたが、正しく動作することはありません。私はどんな助けにも感謝します。ありがとう!

更新:

Function1は、Key1を使用して情報をストリームします。 Function2はFunction1と同じですが、代わりにKey2を使用します。私は事を少し明確にすることを願っています。

+0

私はこれが可能ではないと思います。 Javascriptはシングルスレッドなので、コードを中断することはできません。タイムアウト関数は、イベントループから実行されます。イベントループは、Javascriptが返るまで実行されません。 – Barmar

+0

これは、function1とfunction2の機能に関連しています。彼らは中断されるまで無期限の機能になると予想されていますか?また、繰り返しの間に遅れがあることもありますか? –

+0

'function1'は実際に無期限に実行され、停止する必要がありますか(例えば' while(true) 'のようなものがあります)、それを合計9秒間繰り返し呼び出す必要があります短い時間しかかかりません)? – CRice

答えて

1

JavaScriptにはこのような機能はありません。 (そして言語があれば私には分かりません)。

let start = new Date().getTime(); 
while(new Date().getTime() - start < 9000) function1(); 
start = new Date().getTime(); 
while(new Date().getTime() - start < 1000) function2(); 

のJavascriptの「メイン」スレッドが10秒間、この仕事をして立ち往生することになるので、それは悪い考えです:この問題を回避するには、ようなものになるだろう。しかし、時間が経過していない間に関数が繰り返し実行されるようにするには、他の選択肢はありません。たぶんあなたは関数の中にそれらのwhilesを入れたいと思うかもしれませんが、それはあなた次第です。

私はこの作業を実行するためのWebワーカーを実行することをお勧めします。 Webワーカーはブラウザをフリーズしないので、より良いオプションです。

https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API

あなたは以下のコードを書きたい場合はマイナス操作が発生したときに、JavaScriptをミリ秒数に日付をキャストしますので、あなたは、getTime()の呼び出しをOMMITことができますが、私は明示的な方法は、(優れていると信じて私はそれをテストしていない)。

0

私はこのように、あなたの関数は、変更せずに、無期限に実行し続けることを前提としています

function1() { 
    while (true) { console.log("One more round"); } 
} 

あなたはおそらくしたいことは、あなたが簡単に測定することで行うことができ、これらの機能が実行されているどのくらいの時間を制御することです実行中の関数内の時間:

function1() { 
    var startTime = performance.now(); 
    while (performance.now() - startTime < 9000) { 
     console.log("One more round"); 
    } 
} 

これはco-operative multitaskingの形式です。 JavaScriptは本質的にシングルスレッドなので、9秒間、他のすべての実行をブロックします。データ処理の世界では、それは非常に長い時間です。

イベントやタイマーに依存するようにプログラムをリファクタリングすることをお勧めします。

より良い回答を得るには、機能の動作方法に関する情報を追加して質問を改善できます。

関連する問題