在async函數中 await后面函數出錯,后面代碼還能執行嗎?為什么?


先來回到上面問題:不會執行,因為async await 的存在,將異步請求等同於變成了同步,函數里面代碼是一步一步執行的,前面報錯,后面代碼將不會執行:

 

 

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

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

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

 

 

 

2.只在請求成功情況下處理數據:

在請求成功的情況下處理數據,不成功情況下拋出異常,因為是異步請求,后面的代碼會先執行,即使請求出現異常,后面代碼已經執行完畢了,這個前提是你不需要獲取請求來的數據進行出現,而是做其他功能的操作:

 

控制台輸出如下:

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM