ES2017 標準引入了 async 函式
阿新 • • 發佈:2019-01-03
async
表示函式裡有非同步操作,await
表示緊跟在後面的表示式需要等待結果。
async
函式對
Generator 函式的改進,體現在以下四點。
(1)內建執行器。
Generator 函式的執行必須靠執行器,所以才有了co
模組,而async
函式自帶執行器。也就是說,async
函式的執行,與普通函式一模一樣,只要一行。
var result = asyncReadFile();
上面的程式碼呼叫了asyncReadFile
函式,然後它就會自動執行,輸出最後結果。這完全不像
Generator 函式,需要呼叫next
方法,或者用co
模組,才能真正執行,得到最後結果。
(2)更好的語義。
async
和await
,比起星號和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