如何在javascript中停止传播嵌套的try / catch错误?

时间:2016-01-08 16:50:35

标签: javascript try-catch

function1()输出:

a
d
b

我想要的是,如果function2错误,返回到function1,并将输出保留在:

a
d

这可能吗?我想我可以在finally块中引用返回的布尔值(错误或不错),但我想知道是否有更好的解决方案。

function1(){
    try {
             console.log("a");
             function2();
             console.log("b");
         } catch (e){       
             console.log("c");
         }
}
function2(){
    try {
             if(...) throw new Error();
         } catch (e){
             console.log("d");
         }
}

1 个答案:

答案 0 :(得分:1)

我认为您真的希望您的代码返回,并且您应该查看结构解决方案以获得所需的输出。

为了确保function1停止执行,让function2抛出一个错误。您可以不捕获function2中的错误并让它们冒泡,或者您可以从函数2中的catch块中抛出错误:

function2(){
    try {
             if(...) throw new Error();
         } catch (e){
             console.log("d");
             throw new Error();   //do this!
         }
}

另外,我意识到你可能正在寻找一些比这更多的控制,所以你可以把一些东西从function2扔到function1,让它更清晰如下:

function one(){
    try {
             console.log("a");
             two();
             console.log("b");
         } catch(e){       
             console.log(e == 7);  //this is true!
         }
}

function two(){
    try {
             if(true){ throw new Error();}

         } catch(e){
             console.log("d");
             throw 7;
         }
}

one();