是的,如果您使用setInterval
并带有间隔如你所见,它最终会开始漂移。但是,您不必持续不断地进行调查:您只需使用链接电话setTimeout
即可。每个人都按照时钟检查自己。有时超时会是59999,有时候会是59997等等,但是它总会和时钟保持一致。
function everyMinuteOnTheMinute() {
setTimeout(function() {
var d = new Date();
console.log(d.getMinutes() + " (" + d.valueOf() % 1000 + ")");
// your "every minute" code goes here
everyMinuteOnTheMinute();
}, 60000 - Date.now() % 60000);
}
您可以通过添加回调变成一个一般效用:
function everyMinuteOnTheMinute(cb) {
setTimeout(function() {
cb();
everyMinuteOnTheMinute(cb);
}, 60000 - Date.now() % 60000);
}
然后当你有一些代码,你需要运行在分每分钟,只需要使用效用函数:
everyMinuteOnTheMinute(function() {
console.log("Whee, I'm happening every minute on the minute!");
});
[setInterval时间慢慢偏离保持准确]的可能重复(http://stackoverflow.com/questions/8173580/setinterval-timing-slowly-drive-away-from-staying-accurate) – Josh
pos sible重复的[如何在JavaScript中创建一个精确的计时器?](http://stackoverflow.com/q/29971898/1048572) – Bergi