2016-01-08 32 views
1

function1()輸出:如何停止JavaScript中的嵌套try/catch錯誤的傳播?

a 
d 
b 

我想的是,如果function2錯誤,返回功能1,並留下輸出在:

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

我想你真的想讓你的代碼返回,並且你應該看看結構解決方案來獲得你想要的輸出。

爲了確保函數1暫停執行,請讓函數2拋出錯誤。您可以抓不住誤差函數2,讓他們泡了,或者你可以從catch塊的功能2拋出一個錯誤:

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();