2017-08-25 13 views
0

setIntervalに時間が残っているという条件でコードを実行できるようにします。setInterval JavaScriptの残りの部分

let car = setInterval(function() { 
    // stuff 
    }, 2000); 

    let vehicle = setInterval(function() { 
    train() 
    }, 1000); 

    function train() { 
    // stuff 
    // and if car has time left, do this stuff too. 
    } 

列車機能の最後の行では、車の残り時間を確認したいが、そのような概念についてどうやって行くのか分からない。 私は正確な時間を知っているか、または時間が残っていることがわかりました。

+1

時間の詳細を心配するのではなく、アクションが完了したときにオブザーバーに通知できるイベントを割り当て/バインドできます。 – Pineda

答えて

1

これは可能ではありません。タイマーは実際にはJavaScriptランタイムの外部で実行され、その中に指定された時間は決して正確な測定値ではありません。実際には、タイマーが実行されると予想される最小時間です。実際の時間は、JavaScriptランタイムの使用状況によって異なります。タイマーのタイムアウト時にランタイムがアイドル状態の場合、タイマーのコールバック関数を実行できます。

JavaScriptの実行スタックがアイドルになるまでにどれくらいの時間が必要かを計算する必要があります。時間計測を行うには、残りの部分を実行する必要がありますコード。時間がなくなるまで答えを得ることはできません。

しかし、あなたのコードに基づいて、単にcarが実行されるときに設定される単純な "フラグ"変数を設定できるようです。したがって、trainの内部では、フラグがまだ設定されているかどうかを確認し、そうでない場合はtrainコードを実行してフラグをリセットします。

0

タイマーは潜在的に非常に不正確であり、setIntervalのルールは興味深いです...あなたのハンドラが次のインターバルが開始する予定だったときに過去に実行された場合。心に留めておくことが大切です。

しかし、あなたの目標は、それはタイマーが再起動するように設定されようとしているとき、対タイマーへの呼び出しの開始以来をされているどのくらい知っているのであれば、それはあなたが

var start = Date.now(); 
を開始覚えるの問題です

...その後、間隔との相対的な期間を確認します。例えば:

if (Date.now() - start >= 1900) { 
    // It's been at least 1900ms since the start of the `vehicle` call, 
    // so based on a 2000ms interval, in theory you have only 100ms left 
} 

しかし、再び、他のものは、忙しいUIスレッドを維持している場合はタイマーはかなり不正確できることに注意してください。

+0

*(上記の '> = 1900 'が表示されない場合は、refreshを押します。 )* –

関連する問題