gpt4 book ai didi

Javascript 计时 : How do I execute a function every 5, 7 和 8 秒?

转载 作者:行者123 更新时间:2023-11-29 15:40:11 24 4
gpt4 key购买 nike

假设我有一个函数 log()

var log = function(i) {
console.log('Executing at time: ' + i);
}

我想每隔 x、y 和 z 秒执行一次 log()

让我们任意将 x、y 和 z 设置为 5、7 和 8。

var x = 5;
var y = 7;
var z = 8;

每 x、y 和 z 秒我想调用 log():

// Every 5 seconds:
log(x);
// Every 7 seconds:
log(y);
// Every 8 seconds:
log(z);

我可以尝试使用三个 setTimeout() 来单独运行这些函数。但是等等,javascript 不是异步的,所以一个 setTimeout() 的执行将阻止其他两个的执行...嗯...

我可以计算时间差,这样由第一个 setTimeout() 引起的延迟就不会破坏第二个和第三个的时间:

// x is at 5 seconds, run 5000 milliseconds after the start
setTimeout(function() { log(x); }, 5000);
// y is at 7 seconds after start, or 2000 milliseconds after x is done
setTimeout(function() { log(y); }, 2000);
// z is at 7 seconds after start, or 1000 milliseconds after y is done
setTimeout(function() { log(z); }, 1000);

但时机永远不会完全正确,因为我的 log() 函数的执行至少需要少量时间。此外,当我尝试添加更多 log() 命令时,或者当我尝试以设定的时间间隔重复整个过程时,这会变得很困惑。

我可以使用一个循环,计算秒数,然后在第 x、y 和 z 秒执行我的命令:

var i = 0;
while(i<10) {
// wait 1 second (pointless function, don't know a better way to wait a second)
setTimeout(function() { console.log(' ... '); }, 1000);
i++;

// execute x, y, or z depending on what time it is
switch(i) {
case 4:
log(x);
case 6:
log(y);
case 7:
log(z);
}
}

但是这种“计数”方法,我使用 setTimeout() 执行一个无用的命令,真的让我感到效率低下。

有没有更好的方法来测量 javascript 中的时间,并让函数在未来的特定时间执行?对我来说关键是它不仅仅是“每 5 秒运行一次 log()”,因为我明白这一点。令我困惑的是“在 x、y 和 z 时运行 log()”。

最佳答案

您可以使用函数“setInterval”。这是一个例子:

var interval1Id = setInterval(function(){
console.log("logging every 5 seconds");
},5000);

var interval2Id = setInterval(function(){
console.log("logging every 7 seconds");
},7000);

var interval3Id = setInterval(function(){
console.log("logging every 8 seconds");
},8000);

保存变量“intervalXId”以防万一您想停止任何间隔。

关于Javascript 计时 : How do I execute a function every 5, 7 和 8 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com