異步函數,也稱爲「async/await」(語法關鍵字),是 ES6 Promise
模式在 ECMAScript 函數中的應用。
async/await 是 ES8 規範新增的。這個特性從行爲和語法上都加強了 JavaScript,讓以同步方式寫的代碼可以異步執行。異步
下面來看一個最簡單的例子,這個 Promise
在超時以後會處理爲一個值:async
let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3));
這個 Promise
在 1000 毫秒以後處理爲數值 3。若是程序中的其餘代碼要在這個值可用時
訪問它,則須要寫一個解決處理程序:函數
let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3)); p.then((x) => console.log(x)); // 3
這實際上是很不方便的,由於其餘代碼都必須放到 Promise
處理程序中。不過能夠把處理程序定義爲一個函數:code
function handler(x) { console.log(x); } let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3)); p.then(handler); // 3
這個改進其實也不大。這是由於任何須要訪問這個 Promise
所產生值的代碼,都須要以處理程序的形式來接收這個值。也就是說,代碼照樣仍是要放處處理程序裏。ip
ES8 爲此提供了 async/await 關鍵字同步