有了promise爲何還要async、await

異步函數,也稱爲「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 關鍵字同步

相關文章
相關標籤/搜索