async、await 優缺點併發
async
和await
相比直接使用Promise
來講,優點在於處理 then 的調用鏈,可以更清晰準確的寫出代碼。缺點在於濫用await
可能會致使性能問題,由於await
會阻塞代碼,也許以後的異步代碼並不依賴於前者,但仍然須要等待前者完成,致使代碼失去了併發性異步
下面來看一個使用 await
的代碼。async
- 首先函數
b
先執行,在執行到await 10
以前變量a
仍是0
,由於在await
內部實現了generators
,generators
會保留堆棧中東西,因此這時候a = 0
被保存了下來- 由於
await
是異步操做,遇到await
就會當即返回一個pending
狀態的Promise
對象,暫時返回執行代碼的控制權,使得函數外的代碼得以繼續執行,因此會先執行console.log('1', a)
- 這時候同步代碼執行完畢,開始執行異步代碼,將保存下來的值拿出來使用,這時候
a = 10
- 而後後面就是常規執行代碼了