首页 > 解决方案 > 如何在 JavaScript 中每 5 分钟循环调用两个交替函数?

问题描述

承认该setTimeout()方法是异步的,因此从这个开始:

for (var i = 1; i <= 3; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i + " second(s) elapsed");
    }, i * 1000);
  })(i);
}

我想用一些东西来代替 console.log()

交替调用,每个延迟例如 5 分钟,但需要一些帮助来替换它而不破坏它:-) 所以我问。


这是一个早期(但不成功)的尝试:

i=0;
while(i < 100)
{
    setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
    setTimeout(function(){ window.open("https://www.cnn.com","_self") }, 3000);
  i++
}

tldr;

也想过用switch()语句


也可以看看:

如何使while循环中的setTimeout在JavaScript中按顺序执行?

循环内的 JavaScript 闭包——简单实用的示例

每 5 分钟后交替调用两种方法。

标签: javascriptloopsasynchronoustimeout

解决方案


您可以有两个函数在超时时互相调用,就像这样。您还可以跟踪计时器,以防您想在事件发生时或在一定时间后停止它。

function toggleCalls () {
  var timer = {timeout: null};
  function callA () {
    console.log("A Called");
    timer.timeout = setTimeout(callB, 1000);
  }
  function callB () {
    console.log("B Called");
    timer.timeout = setTimeout(callA, 1000);
  }
  callA();
  return timer;
}

var timer = toggleCalls();

setTimeout(function () {
  clearTimeout(timer.timeout);
  console.log("stopped");
}, 5000);


推荐阅读