ES2017 標準引入了 async 函式

2021-08-02 16:25:26 字數 1106 閱讀 8929

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命令的語法糖。

引用文章:

ES2017中的修飾器Decorator

修飾器 decorator 是乙個函式,用來修改類的行為。本文將詳細介紹es2017中的修飾器decorator es2017 引入了這項功能,目前 babel 轉碼器已經支援decorator 首先,安裝babel core和babel plugin transform decorators。由於...

es5標準模式

trycatch e 防止我們報錯的 trycatch e document.write 黃山 這行繼續執行 error.name的六種值對應的資訊 10 39 17 58 1.evaierror eval 使用與定義不一致 2.rangeerror 數值越界 3.referenceerror 非法...

ES6引入iterable型別

遍歷array可以採用下標迴圈,遍歷map和set就無法使用下標。為了統一集合型別,es6標準引入了新的iterable型別,array map和set都屬於iterable型別。具有iterable型別的集合可以通過新的for of迴圈來遍歷。for of迴圈是es6引入的新的語法,請測試你的瀏覽...