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...