Javascript 2秒后留下一个循环
我想在while循环中重复一段文字2秒钟。如何在2秒后打破循环 这是我到目前为止尝试过的,但不起作用:Javascript 2秒后留下一个循环,javascript,Javascript,我想在while循环中重复一段文字2秒钟。如何在2秒后打破循环 这是我到目前为止尝试过的,但不起作用: var repeat = true; setTimeout(function() { var repeat = false }, 2000) while(repeat) { console.log("Let's repeat for 2 seconds..."); } JavaScript是单线程的。这意味着只要循环运行,就永远不会触发超时 根据您想要什么以及是否要锁定浏览器(通过使
var repeat = true;
setTimeout(function() { var repeat = false }, 2000)
while(repeat) {
console.log("Let's repeat for 2 seconds...");
}
JavaScript是单线程的。这意味着只要循环运行,就永远不会触发超时 根据您想要什么以及是否要锁定浏览器(通过使用实际的无限循环),您可以使用
setInterval
作为循环,并使用setTimeout
在2秒后停止间隔
console.log(“启动循环”);
var interval=setInterval(函数(){
log(“让我们重复2秒钟…”);
}, 0);
setTimeout(函数(){
间隔时间;
console.log(“完成的循环”);
}, 2000);代码>除了另一个答案之外,您只需检查时间即可:
const start = +new Date;
while(+new Date < start + 2000) {
console.log("Let's repeat for 2 seconds...");
}
const start=+新日期;
而(+新日期<开始日期+2000年){
log(“让我们重复2秒钟…”);
}
如果您关心这个循环的性能,那么建议的解决方案将是一个问题
请注意,在大多数情况下,不应该在Javascript中同步迭代大量次,因为这会在这段时间内完全阻塞浏览器或服务器,但在某些情况下可能需要这样做。请注意,这通常不是一件好事
下面是我自己对几个选项的实验,这些选项可以减少检查超时的开销,因为我使用超时来对其他代码进行基准测试
我在这两个解决方案中都添加了console.time日志,并添加了一些可能值得考虑的优化
接受的解决方案具有最差的性能:
const标签='interval';
控制台。时间(标签);
设i=0;
常数间隔=设置间隔(
() => {
i+=1;
},
0);
设置超时(
() => {
间隔时间;
console.timeEnd(标签)
log(`${i.toExponential()}迭代`);
},
2000);
//间隔:2001.100毫秒
//4.93e+2次迭代
不可能超时,while循环将其锁定。您需要检查循环中的时间。还是不太好,因为它仍然会锁定浏览器,浏览器可以阻止它可能的重复,嗯,重复是一个非常糟糕的@请取消删除你的答案,这是一个很好的选择one@JonasW. 好吧,至少这一个得到了一些好的答案。也许我们应该考虑把另一个作为一个重复: