根据下面的代码超时不正常如何解决这个问题。
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);
});
}
}
})();