JavaScript中的異步函數
ES8 的 async/await 旨在解決利用異步結構組織代碼的問題。為此, ECMAScript 對函數進行了擴展,為其增加了兩個新關鍵字: async 和 await。
async 關鍵字用於聲明異步函數。這個關鍵字可以用在函數聲明、函數表達式、箭頭函數和方法上
使用 async 關鍵字可以讓函數具有異步特征,但總體上其代碼仍然是同步求值的。而在參數或閉包方面,異步函數仍然具有普通 JavaScript 函數的正常行為
不過,異步函數如果使用 return 關鍵字返回了值(如果沒有 return 則會返回 undefined),這個值會被 Promise.resolve()包裝成一個期約對象。異步函數始終返回期約對象。在函數外部調用這個函數可以得到它返回的期約
async function foo() {
console.log(1);
return 3;
}
foo().then(console.log)
console.log(2)

2 await
因為異步函數主要針對不會馬上完成的任務,所以自然需要一種暫停和恢復執行的能力。使用 await關鍵字可以暫停異步函數代碼的執行,等待期約解決。