【问题标题】:setInterval not running every secondsetInterval 不是每秒都运行
【发布时间】:2019-01-16 01:59:52
【问题描述】:

我在 react-native 中使用 setInterval 和 TimerMixin,如下所示。

TimerMixin.setInterval(
  () => {
      console.log('timer running!');
      const seconds = this.gameTimerView.current.returnSeconds();
      console.log(`timer seconds: ${seconds}`);
    },
  1000
);

我从日志中注意到它并不是每秒都被调用。

.js:1648 timer seconds: 6
.js:1646 timer running!
.js:1648 timer seconds: 7
.js:1646 timer running!
.js:1648 timer seconds: 8
.js:1646 timer running!
.js:1648 timer seconds: 10
.js:1646 timer running!

无论如何我可以确保它每秒运行一次吗?

// 更新
其根源在于我们有一个对象/值数组,例如:

{ 
    0: {positionSpace: 0, completed: false },
    7: {positionSpace: 7, completed: false },
    12: {positionSpace: 8, completed: false },
    20: {positionSpace: 14, completed: false },
}

对于上面的每个键值,我们需要移动一个用户/小动画。 IE。在 7 秒,然后是 12 秒,然后是 20 秒,依此类推。

但是,这里的重要说明是计时器可以暂停。 IE。如果用户关闭应用程序(暂停),计时器也会暂停。所以我们不能只setTimeout 为上述每一个,因为不认为这会起作用吗?

【问题讨论】:

  • 如果 cpu 负载和 js 引擎的工作负载允许,它大约每秒运行一次。您永远无法保证脚本每秒都会运行,因此如果时间很重要,那么您通常会计算自上次计算以来经过的时间。
  • 您能否详细说明您评论的第二部分?
  • 取决于你想做什么。如果您需要将它用于动画,则需要以比上一个动画步骤以来的秒数更高的精度计算经过的时间。如果要显示倒计时/经过的计时器,则需要执行其他操作。
  • 我会用这里的路线/场景更新问题。
  • 更新问题

标签: javascript react-native setinterval


【解决方案1】:

奇怪的是,这种转变造成了如此大的差距。可能是您使用的组件造成的。

但从 javascript 核心的角度来看,不可能确定时间不会漂移——即使你找到了导致时间漂移大的原因。

【讨论】:

  • 差距不大。更有可能是8.4... 秒和9.8... 秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2021-09-24
相关资源
最近更新 更多