Задать вопрос

Как сделать чтобы скрипт выполнялся 1 раз за 5 секунд?

Как ни странно имеем такой вот код:

function testworking(n){ 
   if(n == 1)
      testuser();
   else
        testconfig();
}

setInterval(function(){testworking(n)}, 1000);


Вопрос как сделать, чтобы до следующего вызова функции testuser(); прошло не менее 10 секунд(т.е. чтобы она сработала первый раз, и пока не пройдет 10 секунд второй раз она бы не запускалась) ?
  • Вопрос задан
  • 2384 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
deleted-tnorman
@deleted-tnorman
setInterval(function(){testworking(n)}, 1000);
1000 — количество милисекунд. Соответственно 1000 = 1 секунда. 10000 = 10 секунд.
может помочь.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
гуглите в сторону throttle
Ответ написан
Keyten
@Keyten
Самый очевидный вариант - взять Date.now() (или +new Date) и смотреть по кол-ву мс, сколько прошло времени

Как-то примерно так:
var last;
function testworking(n){ 
   if(n == 1){
      if(!last) testuser();
      if(+new Date - last >= 10000){
          testuser();
          last = +new Date;
      }
      else { // если прошло меньше 10 секунд, то смотрим, сколько осталось, и ставим таймер
            setTimeout(function(){
                testuser();
                last = +new Date;
            }, +new Date - last);
      }
   }
   else
        testconfig();
}

setInterval(function(){testworking(n)}, 1000);


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

Но решение выглядит примерно так, да.
Ответ написан
Комментировать
phplamer
@phplamer
1. Если используете Underscore то там есть функция
underscorejs.ru/#throttle
2. Можно написать самому.
3. Скопировать реализацию из Underscore чтобы не цеплять всю библиотеку если она не используется.
Ответ написан
Комментировать
Вам может помочь рекурсия
Пример
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы