es6 generator 基礎知識

2022-01-11 16:57:29 字數 1499 閱讀 5937

1、定義和使用

function *gen() 

//有點類似類的例項化過程

let generatorresult =gen()

//核心方法next

generatorresult.next() //

//generator 如同乙個序列:一旦序列中的值被消費,你就不能再次消費它。

generatorresult.next() //

undefined

2、next() / value

function *gen() 

let genresult =gen();

genresult.next().value

//first

genresult.next().value //

second

genresult.next().value //

third

3、for ... of  ...

function *gen() 

for(const value of gen())

//fitst

//second

//third

4、next() 往 generator 中賦值

function *gen() 

var genresult =gen()

genresult.next()

genresult.next('mr. ')

genresult.next('right') //

mr. right

//解釋一下,由於yield可以理解為暫停器。

//當第一次呼叫 next 時,**將返回並且暫停於此: var firstname = yield;

//有趣的事情發生在第二次呼叫 next 時: genresult.next('mr. ')。

//此時我們向 next 呼叫傳入了值!generator將從上一次暫停中恢復,並且 yield將被 "mr. " 替換。因此firstname的值變成'mr. '

//然後繼續執行,而又遇到yield處再次暫停: genresult.next('right')

//第三次呼叫 next: genresult.next('right')

//同前面一樣,傳入的 'right' 將替換 yield,並在賦值完後繼續執行。

//由於沒有yield了。所以正常執行了: genresult.next('right') // mr. right

5、使用gen非同步操作

let gen;

let getdataone = () =>, 1000);

}let getdatatwo = () =>, 1000);

}function *main()

gen =main();

gen.next();

////

1秒後輸出: one two

ES6 generator 函式詳解

generator是es6的新特性,通過yield關鍵字,可以讓函式的執行流掛起,那麼便為改變執行流程提供了可能。function main 使用以上語法就可以宣告乙個generator,注意main是乙個函式 判斷是否為generator function isgen fn generator的構...

ES6 Generator 生成器 函式

es6 新引入了 generator 函式,可以通過 yield 關鍵字,把函式的執行流掛起,為改變執行流程提供了可能,從而為非同步程式設計提供解決方案。基本用法 generator 有兩個區分於普通函式的部分 其中 用來表示函式為 generator 函式,yield 用來定義函式內部的狀態。fu...

ES6 Generator函式的非同步應用

多個執行緒互相協作,完成非同步任務。yield命令表示執行到此處,執行權將交給其他協程,也就是說,yield命令是非同步兩個階段的分界線。協程遇到yield命令就暫停,等到執行權返回,再從暫停的地方繼續往後執行。function asyncjob function gen x var g gen 1...