热情的煎鸡蛋 · 漫画推荐-清冷师尊×疯批徒弟-《徒谋不轨》 ...· 1 年前 · |
酒量大的西红柿 · 习近平:毫不动摇坚持党对军队的绝对领导 - 求是网· 1 年前 · |
机灵的鸡蛋面 · 开局拥有七位绝色师妹动漫一口气看完 - 抖音· 1 年前 · |
私奔的炒饭 · 新能源车的“吉利”选项!不知道怎么选的时候, ...· 1 年前 · |
淡定的胡萝卜 · 如何评价电影《三个月》? - 知乎· 1 年前 · |
我想在
while
循环中添加一个延迟/休眠:
我是这样尝试的:
alert('hi');
for(var start = 1; start < 10; start++) {
setTimeout(function () {
alert('hello');
}, 3000);
}
只有第一种情况是正确的:在显示
alert('hi')
之后,它将等待3秒,然后
alert('hello')
将被显示,但随后
alert('hello')
将不断重复。
我想要的是,在
alert('hi')
之后3秒显示
alert('hello')
之后,第二次显示
alert('hello')
需要等待3秒,依此类推。
发布于 2010-08-27 19:38:39
setTimeout()
函数是非阻塞的,并将立即返回。因此,您的循环将非常快速地迭代,并且将快速连续地一个接一个地启动3秒超时触发器。这就是为什么你的第一个警报会在3秒后弹出,而其他所有警报都会相继出现,没有任何延迟。
您可能希望使用下面这样的内容:
var i = 1; // set your counter to 1
function myLoop() { // create a loop function
setTimeout(function() { // call a 3s setTimeout when the loop is called
console.log('hello'); // your code here
i++; // increment the counter
if (i < 10) { // if the counter < 10, call the loop function
myLoop(); // .. again which will trigger another
} // .. setTimeout()
}, 3000)
myLoop(); // start the loop
您还可以通过使用自调用函数,将迭代次数作为参数传递来整理它:
(function myLoop(i) {
setTimeout(function() {
console.log('hello'); // your code here
if (--i) myLoop(i); // decrement i and call myLoop again if i > 0
}, 3000)
})(10); // pass the number of iterations as an argument
发布于 2010-08-27 19:40:23
尝试如下所示:
var i = 0, howManyTimes = 10;
function f() {
console.log("hi");
if (i < howManyTimes) {
setTimeout(f, 3000);
酒量大的西红柿 · 习近平:毫不动摇坚持党对军队的绝对领导 - 求是网 1 年前 |
机灵的鸡蛋面 · 开局拥有七位绝色师妹动漫一口气看完 - 抖音 1 年前 |
淡定的胡萝卜 · 如何评价电影《三个月》? - 知乎 1 年前 |