如何在每个设备上同时每隔30秒调用一次功能?

Hug*_*ugo 5 javascript jquery

我将尝试正确解释我的问题.我想每30秒产生一次数字,如下所示:

function getRandomNumber(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
setTimeout(function(){
        getRandomNumber(0,14);
    }, 30000);
Run Code Online (Sandbox Code Playgroud)

这很好,但在每个设备上都不一样,比如我用这个代码打开页面,我会得到随机数,但是如果我的朋友在打开页面后5秒钟打开它,就会出现延迟.有没有办法解决它?我认为像获取时间服务器并根据他这样做可以工作,但我不知道该怎么做.

Cod*_*rPi 1

这个问题没有完美的解决方案,这里有两种选择:
一种是简单的,一种是复杂的,应该更精确。


如果您在所有设备上都有相同的时间*,您可以用于new Date().getTime() % 30000第一次调用,因此它们都处于同步状态,然后在超时中始终使用常量 30000。

function getRandomNumber(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
setTimeout(function() {
  getRandomNumber(0, 14);
}, new Date().getTime() % 30000); // first time use this
Run Code Online (Sandbox Code Playgroud)

* 时区并不重要,重要的是一分钟的秒数


另一种方法是让服务器通过他的时间,然后猜测延迟来纠正加载时间,并使用该替代new Date().getTime()

  • 但这是一个**大规模**假设,即使如此,JS 计时器的准确性也不是很可靠。 (2认同)