如何在javascript的for循环中使用timeout和break



根据下面的代码超时不正常如何解决这个问题。

for (let i = 0; i < 4; i++) {
if (socket.isConnected() == true) {
connectCall([]);
break;
} else {
setTimeout(() => {
console.log("Call-1:");
}, 1000);
}
}

这里SetTimeout不能正常工作,每次保持一段时间。我担心的是,当条件是匹配中断循环,不匹配,然后保持一段时间。如果有其他方法,请给我适当的解决方案。如果在while循环或其他循环中执行,则也接受

setTimeout工作正常,它延迟console.log的执行1秒,但这是异步发生的。

正如你在这个例子中看到的,所有的日志都在1秒后直接发生:

for(let i = 0; i < 4; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}

如果你想"睡觉"在你的循环中一秒钟,你必须等待setTimout

您可以使用Promise执行此操作,例如:

(async () => {
const socket = {
isConnected: () => false
}
for (let i = 0; i < 4; i++) {
if (socket.isConnected()) {
connectCall([]);
break;
} else {
await new Promise(res => {
setTimeout(() => {
console.log(`Call-${i}:`);
res();
}, 1000);
});
}
}
})();

相关内容

  • 没有找到相关文章

最新更新