透過JavaScript try catch來做例外處理

Joe Chang
Coding Hot Pot
Published in
Jun 29, 2020

--

第一次接觸try catch是在剛學PHP的時候 ,雖然現在都還給老師就是了…我們可以利用try catch來捕捉例外的狀況,也可以因應不同錯誤狀況,拋出不一樣的錯誤訊息。

今天就舉例一下工作上什麼樣的情境會用到try catch,假設有段程式碼是在處理後端回傳的資料 ,但有機率性的這隻API並不會像我們預期的那樣回傳正確的資料格式,以我曾經遇到的狀況是陣列裡面有數十個物件,但有幾個物件少了Key,這樣描述聽起來有些抽象,直接看資料應該會比較清楚。

這是正常的資料格式
這是有問題的資料格式,可以看到Amy那筆資料缺少了address的key

假設我想要針對每筆資料的address做簡單處理(用換行字符取代逗號),程式碼如下圖

這個是預期的印出的結果

但如果不幸的api回傳的資料剛好是有問題的,你有會看到以下的畫面,因為Amy這筆資料沒有address的key ,所以取其值就會是undefined,並不具有replace這個方法。

並且之後的程式碼都不會執行, console.log(keepGoing)並沒有印出

這時就可以用try catch 來預防這樣的情況,try區塊放的程式碼是你預期可能會出錯的地方,可以針對不同的狀況,用throw拋出不同的錯誤訊息,如果在執行時發生錯誤就會拋出錯誤給catch 並且印出錯誤訊息,補充一下無論是否在try的部分拋出錯誤, finally都會執行。

try(no error) 》finally

try(error) 》 catch 》finally

可以看到拋出自定義的錯誤訊息之外 也會繼續執行下方的程式碼

假設沒有throw error message,那麼catch中的error就會是瀏覽器預設的錯誤訊息。

在工作實務上,比較常用的使用情境是在預防某些錯誤會中斷整個流程,用了try catch之後捕捉到錯誤的同時,也會繼續執行接下來的程式碼,確保不會影響其他程式碼執行。

--

--

Joe Chang
Coding Hot Pot

前端工程師,唯有非常努力,才能看起來毫不費力