首次执行 setInterval 函数时不会延迟

2022-08-29 23:09:40

有一种方法可以配置javascript的方法,以立即执行该方法,然后使用计时器执行setInterval


答案 1

最简单的方法是在第一次直接调用函数:

foo();
setInterval(foo, delay);

但是,有充分的理由避免 - 特别是在某些情况下,整个事件可以紧接着到达,没有任何延迟。另一个原因是,如果要停止循环,则必须显式调用,这意味着您必须记住从原始调用返回的句柄。setIntervalsetIntervalclearIntervalsetInterval

因此,另一种方法是使用以下命令为后续调用触发自身:foosetTimeout

function foo() {
   // do stuff
   // ...

   // and schedule a repeat
   setTimeout(foo, delay);
}

// start the cycle
foo();

这保证了两次调用之间至少有一个间隔。如果需要,它还可以更轻松地取消循环 - 当达到循环终止条件时,您只是不调用。delaysetTimeout

更好的是,您可以将所有这些内容包装在一个立即调用的函数表达式中,该表达式创建函数,然后按上述方式再次调用自身,并自动启动循环:

(function foo() {
    ...
    setTimeout(foo, delay);
})();

它定义了函数并一次性启动循环。


答案 2

我不确定我是否正确地理解了你,但你可以很容易地做这样的事情:

setInterval(function hello() {
  console.log('world');
  return hello;
}(), 5000);

显然有很多方法可以做到这一点,但这是我能想到的最简洁的方法。