У меня есть небольшая проблема, которую я не могу исправить. У меня есть простой 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
Любое решение?
Я благодарен за любую помощь
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();
Как сказал Люк, вероятно, лучше использовать 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)]);
}