如何在每1秒重复1分钟后停止setTimeout

时间:2018-11-10 04:14:09

标签: javascript jquery ajax

Here is Original Question

以下功能正在做一件事。 “无限重复每1秒。”

但是我希望此函数每x秒重复一次,持续1分钟。 1分钟后,它将永远停止。

var repeater;

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

doWork();

3 个答案:

答案 0 :(得分:4)

一种方法是保持每次调用都递增的计数器,并仅在该计数器低于60时才调用递归setTimeout

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

请注意,由于您不在任何地方使用repeater,因此不需要clearTimeout变量。

或者,使用setIntervalclearInterval

const interval = setInterval(doWork, 1000);
setTimeout(() => clearInterval(interval), 59500);
doWork();

答案 1 :(得分:0)

我会将值作为乘数传递给setTimeout持续时间。假设该函数的生命周期超出了此持续时间,它将仅增加传入的值。

因此,您将1000乘以一个整数,该整数将在函数本身内部递增。从1开始到60。然后将指令包装在if语句中。如果增量整数的值小于60,请执行工作。

答案 2 :(得分:0)

只需尝试一下,

var count = 60;

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

doWork();