为什么我的setTimeout函数不等待指定的时间?

问题描述 投票:-1回答:1

我有一个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间隙--...等等。请提供解决的原因。

javascript asynchronous ecmascript-6 settimeout
1个回答
0
投票

您可以在循环中为每个项目修改计时器。

for(let i=0;i<10;i++){
   setTimeout(()=>{
     console.log(i);
   },10*(i+1));
}

这确保了每个项目之间的适当间隙。

希望对您有帮助。


0
投票

您可以尝试这样的事情。

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);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.