Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 2秒后留下一个循环_Javascript - Fatal编程技术网

Javascript 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是单线程的。这意味着只要循环运行,就永远不会触发超时 根据您想要什么以及是否要锁定浏览器(通过使

我想在while循环中重复一段文字2秒钟。如何在2秒后打破循环

这是我到目前为止尝试过的,但不起作用:

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. 好吧,至少这一个得到了一些好的答案。也许我们应该考虑把另一个作为一个重复: