我有一个for循环,我想在延迟后打印它的第i个值,但是使用setTimeout()函数,它等待指定的时间,但是随后我的每个值都打印而没有任何延迟。这是因为setTimeout()是一个异步函数,并且在它完成其第一次倒计时时,所有其他值的时间也都结束了。
for(let i=0;i<10;i++){
setTimeout(()=>{
console.log(i);
},10);
}
输出:(10ms间隔)1-2-3-4-5
需要的输出:1-10ms间隙-2 -10ms间隙--...等等。请提供解决的原因。
您可以在循环中为每个项目修改计时器。
for(let i=0;i<10;i++){
setTimeout(()=>{
console.log(i);
},10*(i+1));
}
这确保了每个项目之间的适当间隙。
希望对您有帮助。
您可以尝试这样的事情。
loopWithDelay();
async function loopWithDelay() {
for(let i = 0; i < 10; i++){
console.log(i)
await delay(2000);
}
}
var timer;
function delay(ms) {
return new Promise((x) => {
timer = setTimeout(x, ms);
});
}