Javascript 无限循环-如果执行超过一定时间,则抛出超时错误-如何返回到控制流

Javascript 无限循环-如果执行超过一定时间,则抛出超时错误-如何返回到控制流,javascript,Javascript,对于下面的代码,我们的想法是,如果有任何循环导致执行时间超过指定的时间量,我们就有防护装置来抛出超时错误 function test() { var ___timeout___ = Date.now(); while (true) { if (Date.now() > ___timeout___ + 1000) { throw new Error('Timed out'); } console.log('Infinite Loop?'); }

对于下面的代码,我们的想法是,如果有任何循环导致执行时间超过指定的时间量,我们就有防护装置来抛出超时错误

function test() {

var ___timeout___ = Date.now();

while (true) {
    if (Date.now() > ___timeout___ + 1000) {
        throw new Error('Timed out');
    }
    console.log('Infinite Loop?');
}

}

test();
console.log('left loop 1');
test();
console.log('left loop 2');
但是,当我使用函数
test()
和一些
console.log
语句调用无限循环时,表明我们已经成功调用了循环,在不破坏浏览器的情况下退出了循环,调用了另一个循环,最后离开了第二个循环


为什么我没有得到预期的输出?如果我们不能继续我们的程序,停止执行到底有什么意义?除非我们只是将其构建为每个循环的预防措施,否则这可能就是您正在寻找的解决方案

async function test() {

var ___timeout___ = Date.now();

while (true) {
    if (Date.now() > ___timeout___ + 1000) {
    return false;        
//throw new Error('Timed out');
    }
    console.log('Infinite Loop?');
}

}

await test();
console.log('left loop 1');
await test();
console.log('left loop 2');

您可以用
try catch
包围它,这样异常就不会中断程序的执行

功能测试(){
var\uuuuuuuuuuuuuuuuuuu=Date.now();
while(true){
如果(Date.now()>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu+1000){
抛出新错误(“超时”);
}
}
}
试一试{
test();
}捕获(e){
log('left loop 1');
}
试一试{
test();
}捕获(e){
log('left loop 2');

}
您希望输出是什么?我非常确定
throw new Error()…
将停止JS执行“throw语句引发用户定义的异常。当前函数的执行将停止(throw之后的语句将不会被执行)”-那么,将此语句构建到每个循环中有什么意义呢?