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方法執行後會返回...