for循环中的setTimeout一次触发

时间:2015-10-05 12:49:21

标签: javascript for-loop settimeout

我正在尝试在for循环中运行setTimeout。我已经按照建议将setTimeout移动到一个单独的函数中。但是,在循环结束时,一切似乎都会立即触发。

在这个例子中,我希望console.logs每秒触发一次。

function setDelay(i) {
    setTimeout(function(){
        console.log(i);
    }, 1000);
}

for (var i = 1; i <= 10; ++i) {
    setDelay(i);
}

6 个答案:

答案 0 :(得分:1)

实现此目的的最简单方法是将超时乘以索引:

function setDelay(i) {
    setTimeout(function(){
        console.log(i);
    }, i * 1000);
}

答案 1 :(得分:0)

您的代码存在的问题是,它会创建10次超时,在1秒后或多或少同时启动。

如果你想每秒(或任何其他频率)执行一些事情,你可以改用setInterval。

答案 2 :(得分:0)

你的循环没有延迟,所以你真正想要的是第一次设置1000ms的间隔,第二次设置2000ms等。

self.window?.rootViewController.presentViewController(rootController, animated: true, completion: nil)

这可以通过将时间乘以索引变量来轻松实现。

答案 3 :(得分:0)

您最好使用setInterval()而不是setTimeout()。使用clearInterval()可以阻止它运行。您创建的代码不起作用,因为for循环本身没有范围。您可以使用setInterval()来处理for循环。

答案 4 :(得分:0)

你也可以这样做:

(function updateEverySecond(){
    console.log(1);
    setTimeout(updateEverySecond, 1000);
})();

答案 5 :(得分:0)

使用setInterval和对计数器的引用可能是更好的解决方案。

(function(){
  var count        = 0,
      upperBound   = 3,
      intervalTime = 1000,
      interval     = setInterval(function(){
        if (count === upperBound) {
         clearInterval(interval);
        } else {
          console.log(count);
          count++;
        }
      }, intervalTime);
}());

希望能帮到你!