@kr_ilya

Как выполнять функцию через динамичные промежутки времени?

Как выполнять функцию каждый раз через случайное количество секунд? Чтобы например, было не setInterval(func, 1000)
А вместо 1000 каждый раз было случайно от 500 до 1500.

Соответственно каждый новый запуск функции был через разное время.
  • Вопрос задан
  • 215 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const func = () => {
  console.log('hello, world!!');
  setTimeout(func, 500 + Math.random() * 1000 | 0);
};

func();
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
function setRandomInterval(cb, minDelay, maxDelay, ...args) {
    let timeoutID;
    (function next() {
        const delay = Math.floor(Math.random() * (maxDelay - minDelay) + minDelay);
        timeoutID = setTimeout(() => {
            cb(...args);
            next();
        }, delay);
    })();
    return function cancel() {
        clearTimeout(timeoutID);
    };
}

// использование:
setRandomInterval(func, 500, 2500); // просто запускаем с интервалом от 0.5с до 2.5с
const cancelInteraval = setRandomInterval(() => {
    console.log('it work');
    if(Math.random() > 0.7) {
        cancelInteraval(); // таймаут можно отменить если вызвать возвращенную функцию
    }
}, 200, 500);
setRandomInterval((arg1, arg2, arg3) => {
    console.log(arg1, arg2, arg3);
}, 1000, 3000, 'arg1', 'arg2', 'arg3'); // подобно setTimeout и setInterval можно передать аргументы в колбэк
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы