async 是「異步」的簡寫,而 await 能夠認爲是 async wait 的簡寫。異步
因此應該很好理解 async 用於申明一個 function 是異步的,而 await 用於等待一個異步方法執行完成。async
async 函數是什麼?一句話,它就是 Generator 函數的語法糖。async
函數就是將 Generator 函數的星號(*
)替換成async
,將yield
替換成await
,僅此而已。函數
async 函數返回的是一個 Promise 對象。code
async 函數(包含函數語句、函數表達式、Lambda表達式)會返回一個 Promise 對象,若是在函數中 return
一個直接量,async 會把這個直接量經過 Promise.resolve()
封裝成 Promise 對象。對象
若是它等到的不是一個 Promise 對象,那 await 表達式的運算結果就是它等到的東西。it
若是它等到的是一個 Promise 對象,await 就忙起來了,它會阻塞後面的代碼,等着 Promise 對象 resolve,而後獲得 resolve 的值,做爲 await 表達式的運算結果。io