首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间同步间隔

时间同步间隔
EN

Stack Overflow用户
提问于 2021-04-21 09:44:23
回答 1查看 132关注 0票数 1

我想在一个间隔内执行一个函数。是的,我可以使用setInterval,但我需要间隔时间同步到时间戳什么的。

就像我想在两个不同的设备上执行间隔一样,它们应该在完全相同的秒内运行,如果可能的话,甚至是ms。但是,如果我使用setInterval方法,则取决于脚本何时启用,这些间隔将被抵消。

我已经试过了,但有点奇怪。

代码语言:javascript
复制
setInterval(() => {
        if (new Date().getTime() % 1000 * 10 == 0) {
            console.log(new Date().toLocaleTimeString())
        }
    }, 1);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 09:54:26

和我一样,想要在两个不同的设备上执行间隔,如果可能的话,它们应该在完全相同的秒甚至毫秒内运行。

不能保证您能做到这一点,尤其是因为其中一个设备上的JavaScript线程可能在那个精确的时刻忙着做其他事情(它甚至可能被捆绑几秒钟)。

除此之外,还有同步设备的问题。备选方案有:

  1. --您同时向两个设备发送的某种同步事件。您将运行代码以响应从服务器接收的同步事件。这自然会受到网络延迟的影响,它需要服务器发送事件(可能是通过web套接字),并且需要遵守关于JavaScript线程繁忙的上述警告。

  1. 依赖于将设备同步到完全相同的时间源(例如,它们可能都在使用NIST时间服务器或类似的设备)。如果您知道它们的时间对您的目的是充分同步的,您可以安排您的计时器在一个精确的时刻开火,如下所示:

// 2021-04-21目标=新日期(Date.UTC(2021,3,21,14,30));// 3=4月,从0= Jan = Date.now()开始;如果(延迟< 0) {/它已经晚于该}{ setTimeout(() => { //您的代码在这里},延迟);

但是,同样,如果JavaScript线程在那个精确的时刻很忙,那么当线程空闲时,计时器回调将在稍后运行。

上面的代码计划了一个单个事件,但是如果您需要一个重复的事件,您可以执行相同的基本逻辑:确定您希望下一个回调发生的日期/时间,找出从现在到那时(Date.now() - target)之间是多少毫秒,并将回调时间安排在那么多毫秒之后。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67193250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档