重置具有不同值的JavaScript时间间隔?

时间:2017-10-20 14:56:35

标签: javascript node.js

我有一个小问题,我似乎无法修复。 我有一个简单的JavaScript代码,我想创建一个随机数秒的Interval,然后在它完成之后它应该重新开始并再次进行随机的秒数。

我的代码看起来像这样



var selectedtimes = [3000, 5000, 15000, 10000]
var randtimes = selectedtimes[Math.floor(Math.random() * selectedtimes.length)];

var sti = setInterval(function() {
  console.log("now")
}, randtimes);

function restartsti() {
  var restartinterval = setInterval(restartsti, selectedtimes[Math.floor(Math.random() * selectedtimes.length)]);
}




我尝试创建第二个重启间隔的函数,但此时间隔只需要一个随机数,只使用该特定数字作为持续时间。

为了简化我的Node.js控制台应该显示" now"每个randtimes秒

对此有何解决方案?

我很感激你的帮助

2 个答案:

答案 0 :(得分:5)

setInterval适合在延迟旨在保持一致时使用。

由于您的延迟每次都有所不同,因此最好在此处使用setTimeout

var times = [3000, 5000, 10000, 15000];

function start() {    
  console.log("now");
  var randTime = times[Math.floor(Math.random() * times.length)];
  setTimeout(start, randTime);
}

start();

答案 1 :(得分:1)

正如卢克所说,使用setTimeout可能更好。

但是如果你想继续使用setInterval,你可以用clearInterval停止旧的(提供setInterval函数返回的intervalID)并启动一个新的:

var selectedtimes = [3000, 5000, 15000, 10000]

var randtimes = selectedtimes[Math.floor(Math.random() * selectedtimes.length)];


var sti = setInterval(function () {
    console.log("now")
    }, randtimes);

function restartsti() {
    clearInterval(sti);

    sti = setInterval(function() {
        console.log("now");
        restartsti()
    }, selectedtimes[Math.floor(Math.random() * selectedtimes.length)]);
}