1. 程式人生 > >ES2017 標準引入了 async 函式

ES2017 標準引入了 async 函式

async表示函式裡有非同步操作,await表示緊跟在後面的表示式需要等待結果。

async函式對 Generator 函式的改進,體現在以下四點。

(1)內建執行器。

Generator 函式的執行必須靠執行器,所以才有了co模組,而async函式自帶執行器。也就是說,async函式的執行,與普通函式一模一樣,只要一行。

var result = asyncReadFile();

上面的程式碼呼叫了asyncReadFile函式,然後它就會自動執行,輸出最後結果。這完全不像 Generator 函式,需要呼叫next方法,或者用co模組,才能真正執行,得到最後結果。

(2)更好的語義。

asyncawait,比起星號和yield,語義更清楚了。async表示函式裡有非同步操作,await表示緊跟在後面的表示式需要等待結果。

(3)更廣的適用性。

co模組約定,yield命令後面只能是 Thunk 函式或 Promise 物件,而async函式的await命令後面,可以是Promise 物件和原始型別的值(數值、字串和布林值,但這時等同於同步操作)。

(4)返回值是 Promise。

async函式的返回值是 Promise 物件,這比 Generator 函式的返回值是 Iterator 物件方便多了。你可以用then方法指定下一步的操作。進一步說,async函式完全可以看作多個非同步操作,包裝成的一個 Promise 物件,而

await命令就是內部then命令的語法糖。

引用文章: http://es6.ruanyifeng.com/#docs/async