首頁 >web前端 >js教程 >Generator函數與async函數的差異介紹

Generator函數與async函數的差異介紹

不言
不言轉載
2019-04-04 11:28:152386瀏覽

這篇文章帶給大家的內容是關於Generator函數與async函數的區別介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

Generator函數:

Generator函數是ES2015提供的非同步解決方案,與一般函數有很大的不同;

特徵:

1、在function關鍵字後面跟著一個(*)號;

2、在函數體內部使用yield表達式作為一個狀態;

Generator函數傳回一個遍歷器,可透過for……of方法遍歷每個狀態;

用法:

執行Generator並不立刻執行,傳回一個遍歷器,遍歷器透過呼叫next()、throw()或return()執行下一個狀態、捕獲錯誤或結束遍歷器;

async函數:

async函數是ES2017提供的非同步函數語法,是generator的語法糖,但是用法上與Generator函數還是有很大不同;

特徵:

#1、在function關鍵字前面跟一個async關鍵字;

2、在函數體內部使用await表達式;

async函數傳回一個promise物件;

用法:

執行async函數會立刻執行,和普通函數一樣,但傳回一個promise物件;

兩者對比:

1、Generator 出現在ES2015中,async 出現在ES2017中,async 是Generator 的語法糖;

2、執行方式不同,Generator 執行需要使用執行器(next()等方法);async 函數自帶執行器,與普通函數的執行一樣;

3、async 的語法語意更加清楚,async 表示異步,await 表示等待;而Generator 函數的(*)號和yield 的語意就沒那麼直接了;

4、Generator 中yield 後面只能跟Thunk 函數或Promise 物件;而async 函數中await 後面可以是promise 物件或原始型別的值(會自動轉為立即resovle的promise物件);

5、傳回值不同,Generator 傳回遍歷器,相較於async 傳回promise 物件操作更加麻煩。

【相關推薦:JavaScript影片教學

以上是Generator函數與async函數的差異介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除