Сбросить JavaScript-интервал с другим значением?

1

У меня есть небольшая проблема, которую я не могу исправить. У меня есть простой JavaScript-код, где я хочу создать интервал, который идет на случайное количество секунд, а затем, после того, как он закончится, он должен начать снова и перейти на другое случайное количество секунд.

Мой код выглядит так:

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, нужно показать "сейчас" каждые секунды randtimes

Любое решение?

Я благодарен за любую помощь

Теги:

2 ответа

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

Как сказал Люк, вероятно, лучше использовать setTimeout.

Но если вы хотите продолжать использовать setInterval, вы можете остановить старое с clearInterval (предоставляя интервал ID, возвращаемый функцией setInterval), и запустите новый:

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)]);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню