先來回到上面問題:不會執行,因為async await 的存在,將異步請求等同於變成了同步,函數里面代碼是一步一步執行的,前面報錯,后面代碼將不會執行:
上面代碼中封裝得$api其實也對響應攔截進行了錯誤處理的,但是對於async await來說還是會拋出異常,導致程序不會繼續往下執行,那么如何在代碼錯誤時候還能執行后面東西呢?畢竟有時候我們不需要請求來的數據,而是做其他處理,接來來我通過兩種方法來解決這個問題,並且說出為什么這樣做:
1.通過try···catch包裹會:
try...catch 可以測試代碼中的錯誤。try 部分包含需要運行的代碼,而 catch 部分包含錯誤發生時運行的代碼,即使發生錯誤,后面代碼依舊可以執行:
2.只在請求成功情況下處理數據:
在請求成功的情況下處理數據,不成功情況下拋出異常,因為是異步請求,后面的代碼會先執行,即使請求出現異常,后面代碼已經執行完畢了,這個前提是你不需要獲取請求來的數據進行出現,而是做其他功能的操作:
控制台輸出如下:
至此,我們可以用這兩種方法來解決主題的問題,第一種方法相比較第二種,你可以在try···catch后面拿到請求來的數據進行處理,后一種則不行,后面代碼先於請求執行,獲取不到返回值,但是第一種對於瀏覽器的開銷會大一些,但是我們對於一個請求數據的函數,本質更多的是對獲取到的數據進行處理,為了降低代碼耦合性,更推薦第一種。