這篇文章帶給大家的內容是關於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中文網其他相關文章!