Generator函式與async函式的區別介紹

2022-10-09 10:42:11 字數 931 閱讀 9379

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 物件操作更加麻煩。

關於generator函式的理解與使用

關於generator函式的理解與使用 在js中普通function一但建立並呼叫後,直到return,是不會被打斷,而generator函式是es6提供的乙個關於非同步程式設計的解決方案,特點就是generator函式不會返回執行結果,而是便利函式內部的結果或者狀態,通過函式.next 一次次的輸...

Generator函式學習

例子1 const test function x const a test 1 console.log a.next 3 x 2 3 console.log a.next 11 22 3 2 11 3 console.log a.next 2 18 3 2 3 console.log a.next...

迭代函式 Generator函式的理解

一 基本用法 generator函式跟普通函式在寫法上的區別就是,多了乙個星號 並且只有在generator函式中才能使用yield 什麼是yield呢,他相當於generator函式執行的中途暫停點,比如下方有3個暫停點。而怎麼才能暫停後繼續走呢?那就得使用到next方法,next方法執行後會返回...