如何为setInterval每次调用生成新的延迟?

时间:2018-08-06 20:16:07

标签: javascript

您好,我很想知道如何在setInterval中存档延迟? 可以说我有这样的东西:

function delay(min, max) {
   const d = Math.floor((Math.random() * (max - min)) + min);
   return d;
}


setInterval(function() {
  console.log("Hello");
}, delay(1000, 2000));

这里的问题是,它始终在控制台控制台中生成延迟。我想在每个console.log中产生新的延迟。有可能吗?

1 个答案:

答案 0 :(得分:3)

您可以使用setTimeout并递归调用:

function delay(min, max) {
  const d = Math.floor((Math.random() * (max - min)) + min);
  return d;
}

function func() {
  console.log("Hello");
  setTimeout(func, delay(1000, 2000));
}

setTimeout(func, delay(1000, 2000));

更通用的方法是您自己的间隔生成器:

function setVariableInterval(f, d) {

  function timeoutFunc() {
    f();
    setTimeout(timeoutFunc, d());
  }

  setTimeout(timeoutFunc, d());
}

//You would call it like:

setVariableInterval(func, delay.bind(null, 1000, 2000));