【发布时间】:2021-07-26 22:07:36
【问题描述】:
我正在制作音乐作曲家并播放音符,我正在等待播放下一个音符之前的时间(以毫秒为单位),我发现这似乎非常不准确,有时高达 10 毫秒的不准确,有没有办法让我可以做出更准确的超时或延迟功能来降低 0/1 毫秒的差异? 我目前的代码是:
function delayMs(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
使用“tick”功能:
while (this.state.isPlaying) {
const { song, settings } = this.state
let msPerBPM = Math.floor(60000 / settings.bpm.value)
await delayMs(msPerBPM)
this.handleTick()
}
我可以使用服务人员,因为我注意到我遇到了这个问题,因为反应中的重新渲染延迟。
【问题讨论】:
-
简而言之,没有。你永远不会在 javascript 中获得
setTimeout的毫秒精度 -
它总是在 timout 完成后进入队列,因此无法保证它会立即执行。对于工人来说,情况可能会更糟,也可能不会更糟,这取决于你到底在做什么。工作进程和主进程之间的通信开销很大。
标签: javascript reactjs time