Как остановить setTimeout через 1 минуту, повторяясь каждую 1 секунду - PullRequest
0 голосов
/ 10 ноября 2018

Вот оригинальный вопрос

Следующая функция делает одну вещь. «бесконечно повторяясь каждые 1 сек.»

Но я хочу, чтобы эта функция повторялась каждую х секунду только в течение 1 минуты. Через 1 минуту он должен остановиться навсегда.

var repeater;

function doWork() {
 $('#more').load('exp1.php');
 repeater = setTimeout(doWork, 1000);
}

doWork();

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Я бы передал значение длительности setTimeout в качестве множителя. Предполагая, что жизненный цикл функции существует за пределами этой продолжительности, он просто увеличивает значение, переданное в.

Таким образом, вы умножите 1000 на целое число, которое будет увеличиваться внутри самой функции. Начиная с 1 и заканчивая 60. Затем оберните инструкции внутри оператора if. Если значение целого приращения меньше 60, выполните работу.

0 голосов
/ 12 ноября 2018

Просто попробуйте это,

var count = 60;

function doWork() {
  var interval = setInterval(function(){
      $('#more').load('exp1.php');
      count--;
      if (count ==0) clearInterval(interval);
  },1000);
}

doWork();
0 голосов
/ 10 ноября 2018

Один из способов - сохранить счетчик, который увеличивается при каждом вызове, и вызывать рекурсивный setTimeout только тогда, когда этот счетчик ниже 60:

let count = 0;
function doWork() {
  $('#more').load('exp1.php');
  count++;
  if (count < 60) setTimeout(doWork, 1000);
}
doWork();

Обратите внимание, что переменная repeater не нужна, поскольку вы нигде не используете clearTimeout.

Или, используя setInterval и clearInterval:

const interval = setInterval(doWork, 1000);
setTimeout(() => clearInterval(interval), 59500);
doWork();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...