認識 try…catch,處理錯誤

在程式流程中,難免會遇到錯誤情況,該如何利用 try…catch 處理錯誤呢?

Lai
UnaLai
4 min readAug 30, 2020

--

在程式流程裡,難免會遇到錯誤情況。若不捕捉錯誤,可能造成程式無法繼續運行。因此今天就來簡單認識一下 try…catch 吧!

➤ try…catch

try…catch 分為 try 區塊與 catch 區塊。

若 try 區塊中的程式碼無任何錯誤,則忽略 catch 區塊中的程式碼;若 try 區塊中的程式碼發生錯誤,則中斷 try 區塊程式碼的執行,並將控制權轉給 catch 區塊的程式碼。

catch 區塊接受一參數,可以利用這個參數取得錯誤資訊。

例如:

結果印出 something wrong

在 try 區塊中,執行 test function 時,發生錯誤,錯誤被 throw 丟出,try 區塊執行中斷,將控制權轉給 catch ,因此 console.log("fine")沒有執行,錯誤由 catch 接住作為參數,並可於 catch 區塊中,進行錯誤處理。

try…catch 僅能抓取同步錯誤

如果 try 當中的語句,含有異步程式,且異步程式發生錯誤,則 try 區塊無法捕捉錯誤,因 try 區塊的程式碼已經執行完畢,異步程式碼是發生於 try 區塊之後。

執行結果會印出 fine,並於之後計時器執行時,發生錯誤。

實務上,call API 時,會是異步處理,可以利用 async await 語法轉為同步,當 call API 失敗時,可以由 catch 處理錯誤。例如:

結果印出 something wrong

  • 若錯誤處理過程,不需要使用錯誤資訊,也可以忽略 catch 區塊的錯誤參數。
  • catch 的錯誤參數僅能於 catch 區塊使用。

➤ finally

若在 try…catch 中,不論執行結果好壞,都有後續想要持續進行的程式碼,可撰寫於 finally 區塊。例如:

則不論 await callAPI() 成功或失敗,都會印出other

  • 即使 try 區塊或是 catch 區塊含有 return,finally 區塊內容,仍會在結束 try…catch 語法前完成。例如以下範例,仍可以印出 other
  • try…finally
    如果有些錯誤,想在更外層的地方擷取處理,可以跳過 catch,僅使用 finally 處理必要事項。

以上是今天的小筆記分享,有任何問題都歡迎留言指教,謝謝 😊

--

--

Lai
UnaLai

我是一名前端工程師,我熱愛學習與分享 ❤︎