我正在尝试在for循环中运行setTimeout。我已经按照建议将setTimeout移动到一个单独的函数中。但是,在循环结束时,一切似乎都会立即触发。
在这个例子中,我希望console.logs每秒触发一次。
function setDelay(i) {
setTimeout(function(){
console.log(i);
}, 1000);
}
for (var i = 1; i <= 10; ++i) {
setDelay(i);
}
答案 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);
}());
希望能帮到你!