javascript - 如何将连续的 setInterval() 包装在一个永远的循环中?

标签 javascript node.js setinterval

我试图实现一个功能,该功能应该每 5 秒发布一次测量 A,持续 10 次,然后每 5 秒发布一次测量 B,持续一段随机时间。当我试图实现一个假代理时,我想永远重复这个功能。

所以我有代码:

let intervalId = null, repeat = 0;
while (true) {
    intervalId = setInterval(() => {
      if (repeat < 5) {
        // post measurement A
        repeat += 1;
      }
      else {
        clearInterval(intervalId)
      }
    }, 1000);

    repeat = 0;
    intervalId = setInterval(() => {
      if (repeat < Math.floor(Math.random() * 11)) {
        // post measurement B
        repeat += 1;
      }
      else {
        clearInterval(intervalId)
      }
    }, 1000);
}

这两个setInterval() 函数并没有像我预期的那样连续发生,而是同时发生。而且 while (true) 循环似乎也没有按预期运行。我只是想知道有没有办法解决这个问题?谢谢。

最佳答案

您可以创建两个函数,一个是doA(),一个是doB()

doA()开始,统计//do A被调用的次数,当达到10时, clearInterval 并调用 doB()

doB() 中,设置 minmax 应该被调用的时间,然后当它到达 randTime clearIntervaldoA()

function doA() {

  let count = 0;
  const a = setInterval(() => {
    //do A
    console.log('do A');
    count += 1;
    if (count === 10) {
      clearInterval(a);
      doB();
    }
  }, 5000/10);

}
function doB() {
  // set your min and max for B
  const minTime = 1;
  const maxTime = 10;
  const randTime = Math.floor(Math.random() * (maxTime - minTime + 1)) + minTime;
  let count = 0;
  const b = setInterval(() => {
    // do B
    console.log(randTime);
    console.log('do B');
    count += 1;
    if (count === randTime) {
      clearInterval(b);
      doA();
    }
  }, 5000 / randTime);
}
doA();

关于javascript - 如何将连续的 setInterval() 包装在一个永远的循环中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846058/

相关文章:

javascript - 为什么这个带有对象调用函数的 Javascript setInterval 在传入回调时不评估内部参数?

javascript - 如何通过输入实时高亮文本?

javascript - Bootstrap 样式不适用于 Chrome 35 上的 Shadow DOM

javascript - 动态更新 Grunt 配置字段

node.js - ./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/browser.js 中的错误

javascript - 使用 clearInterval() 时出错

javascript - 使用javascript根据另一个表中的行数更改表宽

javascript - Chrome 中的 Webkit 动画迭代计数错误

node.js - 我应该如何使用 browserify 和 babelify 转换 ES6 node_modules?

javascript - 制作一个函数 setInterval/recursive