簡體   English   中英

setInterval JavaScript的剩余時間

[英]time remainder of setInterval JavaScript

我希望能夠在setInterval上還有時間的情況下運行代碼。

  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.
  }

在火車功能的最后一行,我想檢查汽車的剩余時間,但不了解如何實現這樣的概念。 我想知道剩下的確切時間,或者僅僅是剩下的時間對我來說都是一樣的,所以哪一個更容易。

這是不可能的。 計時器實際上是在JavaScript運行時之外執行的,它們中指定的時間絕不是精確的度量-實際上,這是計時器可以運行的最短時間。 實際時間取決於JavaScript運行時的繁忙程度,如果運行時在計時器超時時處於空閑狀態,則可以運行計時器的回調函數。

因此,從本質上講,您必須計算JavaScript執行堆棧需要多少時間才能變為空閑狀態,而這是無法做到的,因為要進行時間測量,必須執行其余代碼。 因此,直到沒有時間,您才能得到答案。

但是,根據您的代碼,似乎您可以設置一個簡單的“ flag”變量,該變量在car行駛時設置。 因此,在train內部,您可以檢查是否已設置該標志,如果尚未設置,請運行train代碼,然后重置該標志。

請記住,計時器可能非常不精確,並且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線程繁忙,則計時器可能會非常不精確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM