在 for 循环中指定延迟后循环
Loop after specified delay in for loop
我有这个,但好像没用
for (var i = 0; i < 5; i++) {
setTimeout(function() {
// My code
}, 1000);
}
用过一次就不行了
我认为你应该将你的时间乘以 i。
如果只放你的时间,1000ms后所有迭代会同时执行。
因此代码将是:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
// My code
}, 1000*i);
}
我认为 setInterval
更适合这种情况:
let i = 0;
const interval = setInterval(function() {
if(i == 4) clearInterval(interval);
// My code
console.log(i);
i++;
}, 1000);
通过使用 1000
作为持续时间,它使您的代码看起来只适用于第一个 i
实例。这里发生的是,for
循环执行得很快,但是每个 i
的每个 setTimeout
几乎会同时执行,但不完全是……会有拆分 ms
在每个 i
.
之间
假设循环在大约 300ms
内执行,每个 i
在 300ms
/ 5 执行...这意味着每个 setTimeout
将只是 300/5 ms
后面一个。因此,执行此操作时,看起来第一个 i
是显示所需结果的那个,而其他的则没有。
但是,根据我认为您想要实现的目标,您应该尝试在每个 i
之间创建一个大约 1000ms
的超时延迟。所以你应该这样做:
for (let i = 0; i < 5; i++) {
(function(i){
setTimeout(function() {
console.log(i);
}, i*1000);
})(i);
}
我有这个,但好像没用
for (var i = 0; i < 5; i++) {
setTimeout(function() {
// My code
}, 1000);
}
用过一次就不行了
我认为你应该将你的时间乘以 i。 如果只放你的时间,1000ms后所有迭代会同时执行。
因此代码将是:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
// My code
}, 1000*i);
}
我认为 setInterval
更适合这种情况:
let i = 0;
const interval = setInterval(function() {
if(i == 4) clearInterval(interval);
// My code
console.log(i);
i++;
}, 1000);
通过使用 1000
作为持续时间,它使您的代码看起来只适用于第一个 i
实例。这里发生的是,for
循环执行得很快,但是每个 i
的每个 setTimeout
几乎会同时执行,但不完全是……会有拆分 ms
在每个 i
.
假设循环在大约 300ms
内执行,每个 i
在 300ms
/ 5 执行...这意味着每个 setTimeout
将只是 300/5 ms
后面一个。因此,执行此操作时,看起来第一个 i
是显示所需结果的那个,而其他的则没有。
但是,根据我认为您想要实现的目标,您应该尝试在每个 i
之间创建一个大约 1000ms
的超时延迟。所以你应该这样做:
for (let i = 0; i < 5; i++) {
(function(i){
setTimeout(function() {
console.log(i);
}, i*1000);
})(i);
}