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關鍵字能夠暫停異步函數代碼的執行,等待期約解決。