javascript - React Native 中 setTimeout 的准确性

标签 javascript reactjs react-native settimeout

我正在用 React Native 构建一个节拍器。播放一次点击后,我为下一次点击设置了一个 setTimeout。然而,时机太糟糕了。

我做了以下快速测试:

let time = (new Date()).getTime() + 50;

setTimeout(() => {
  console.log(time - (new Date()).getTime());
}, 50)

理想情况下,我应该在控制台中得到 0。在 Chrome Dev Tools 中的 React Native 之外运行它时,我得到 -1,有时是 -2 (ms)。这是一个可以接受的结果。

在 macOS 上使用模拟器在 React Native 中运行它,我得到 0 到 -100 之间的值。这显然是 Not Acceptable 。

有人知道这是由于 setTimeout 不准确还是 (new Date()).getTime() 不准确造成的?我可以解决这个问题吗?

最佳答案

您为 setTimeoutsetInterval 配置的延迟不应被视为精确的延迟时间。它们代表您在执行函数之前等待的“最短”时间。这是因为当时间过去时,用户代理将回调放入事件队列,但如果用户代理仍在执行其他任务,则回调将留在那里。

您还应该知道,有一个内置的绝对最短时间,您永远无法低于大约 9-14 毫秒。这是由于用户代理的内部结构。

关于javascript - React Native 中 setTimeout 的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100658/

相关文章:

javascript - 删除 Div 中的最后一个元素 [JavaScript]

reactjs - 如何设置本地环境以在 https 上运行

javascript - 表格上的水平滚动在 iOS Safari 上不起作用

javascript - react native 导航器 View 不呈现

firebase - 关于新应用程序发布的 React Native 通知(App Store 和 Play Store)

javascript - 在php中生成的动态表中更改td的颜色

Javascript plotly 。如何创建一个 plotly 但不实际绘制它。

javascript - React 未在子组件中显示更新状态

reactjs - 使用 Typescript 进行 React defaultProps 对象数组

javascript - append 到 IFRAME 中的链接 URL