1. 程式人生 > 其它 >在async函式中 await後面函數出錯,後面程式碼還能執行嗎?為什麼?

在async函式中 await後面函數出錯,後面程式碼還能執行嗎?為什麼?

先來回到上面問題:不會執行,因為async await 的存在,將非同步請求等同於變成了同步,函式裡面程式碼是一步一步執行的,前面報錯,後面程式碼將不會執行:

上面程式碼中封裝得$api其實也對響應攔截進行了錯誤處理的,但是對於async await來說還是會丟擲異常,導致程式不會繼續往下執行,那麼如何在程式碼錯誤時候還能執行後面東西呢?畢竟有時候我們不需要請求來的資料,而是做其他處理,接來來我通過兩種方法來解決這個問題,並且說出為什麼這樣做:

1.通過try···catch包裹會:

try...catch 可以測試程式碼中的錯誤。try 部分包含需要執行的程式碼,而 catch 部分包含錯誤發生時執行的程式碼,即使發生錯誤,後面程式碼依舊可以執行:

2.只在請求成功情況下處理資料:

在請求成功的情況下處理資料,不成功情況下丟擲異常,因為是非同步請求,後面的程式碼會先執行,即使請求出現異常,後面程式碼已經執行完畢了,這個前提是你不需要獲取請求來的資料進行出現,而是做其他功能的操作:

控制檯輸出如下:

至此,我們可以用這兩種方法來解決主題的問題,第一種方法相比較第二種,你可以在try···catch後面拿到請求來的資料進行處理,後一種則不行,後面程式碼先於請求執行,獲取不到返回值,但是第一種對於瀏覽器的開銷會大一些,但是我們對於一個請求資料的函式,本質更多的是對獲取到的資料進行處理,為了降低程式碼耦合性,更推薦第一種。