为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 setInterval 不相应地工作?

为什么 setInterval 不相应地工作?

茅侃侃 2024-01-18 16:41:17
我正在尝试制作秒表 (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))}
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

问题是这并不准确,而是近似值。一种选择是使用 Web Worker 来提高准确性,如链接中所述,但这仍然不准确。setInterval


在测量时间时,最好跟踪时间戳并计算出每次滴答/更新时经过了多少时间。然后,您可以更新 UI 或触发警报等。这是一些伪代码。start


const [ 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)

}


查看完整回答
反对 回复 2024-01-18
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信