为什么 setInterval 不相应地工作?

我正在尝试制作秒表 (00:00:00:00)。但我的一秒比真正的一秒慢。 我还将 setInterval 10 的值更改为 1,但没有任何变化。当我将其更改为 100 时,它起作用了,时间流得更慢了。 (00:00:00:00)=(hh:mm:ss:ms) 这是我代码的一部分:


const [time, setTime] = useState({

  ms: 0,

  ss: 0,

  mm: 0,

  hh: 0

})

let degisenMs = time.ms,

  degisenH = time.hh,

  degisenM = time.mm,

  degisenS = time.ss;

const run = () => {

  if (updatedMs === 100) {

    updatedS++;

    updatedMs = 0

  }

  if (updatedS === 60) {

    updatedM++;

    updatedS = 0;

  }

  if (M === 60) {

    updatedH++;

    updatedM = 0

  }

  updatedMs++;

  return (setTime({

    ms: updatedMs,

    ss: updatedS,

    mm: updatedM,

    hh: updatedH

  }))

}

const start = () => {

  setStatus(1)

  run()

  setInterv(setInterval(run, 10))

}


茅侃侃
浏览 90回答 1
1回答

海绵宝宝撒

问题是这并不准确,而是近似值。一种选择是使用 Web Worker 来提高准确性,如链接中所述,但这仍然不准确。setInterval在测量时间时,最好跟踪时间戳并计算出每次滴答/更新时经过了多少时间。然后,您可以更新 UI 或触发警报等。这是一些伪代码。startconst [ startTime, setStartTime ] = useState(null)const [ intervalId, setIntervalId ] = useState(null)function tick() {  const now = new Date()  const elapsedMs = now - startTime  // Update UI etc using elapsedMs}function start() {  setStartTime(new Date())  // Run tick() every 100ms  setIntervalId(setInterval(tick, 100))}function stop() {  clearInterval(intervalId)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript