火星上的金针菇 · pandapower中的状态估计wls原理p ...· 4 月前 · |
聪明的冰棍 · 利用pyppeteer拦截请求,访问目标网站 ...· 1 年前 · |
跑龙套的开水瓶 · flex布局里,min-height相关的问 ...· 1 年前 · |
深情的单杠 · Gdi+绘制半透明文字并保存为透明背景图片_ ...· 1 年前 · |
读研的充电器 · c# - If ...· 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);