Generator函數(shù)
概念:
1帚稠、ES6提供的解決異步編程的方案之一,比promise 稍微簡(jiǎn)便一些
2床佳、Generator函數(shù)是一個(gè)狀態(tài)機(jī)滋早,內(nèi)部封裝了不同狀態(tài)的數(shù)據(jù)砌们,
3搁进、用來生成遍歷器對(duì)象
4昔头、可暫停函數(shù)(惰性求值), yield可暫停,next方法可啟動(dòng)莱革。每次返回的是yield后的表達(dá)式結(jié)果
特點(diǎn):
1、function 與函數(shù)名之間有一個(gè)星號(hào) function* fn(){}
2讹开、內(nèi)部用yield表達(dá)式來定義不同的狀態(tài)
例如:
function* generatorExample(){
let result = yield 'hello'; // 狀態(tài)值為hello
yield 'generator'; // 狀態(tài)值為generator
}
3、generator函數(shù)返回的是指針對(duì)象(即iterator),而不會(huì)執(zhí)行函數(shù)內(nèi)部邏輯
4、調(diào)用next方法函數(shù)內(nèi)部邏輯開始執(zhí)行,遇到y(tǒng)ield表達(dá)式停止瑰枫,返回{value: yield后的表達(dá)式結(jié)果/undefined, done: false/true}
5、再次調(diào)用next方法會(huì)從上一次停止時(shí)的yield處開始鸳惯,直到最后
6辅鲸、yield語句返回結(jié)果通常為undefined, 當(dāng)調(diào)用next方法時(shí)傳參內(nèi)容會(huì)作為啟動(dòng)時(shí)yield語句的返回值。
如下筏勒,Generator函數(shù)返回的是一個(gè)指針對(duì)象邪媳,不會(huì)執(zhí)行函數(shù)內(nèi)部邏輯叮姑,需要定義一個(gè)變量接收此指針對(duì)象极颓,指針對(duì)象通過.next()方法進(jìn)行調(diào)用,遇到y(tǒng)ield就暫停
image
異步請(qǐng)求兩次后端服務(wù)示例:
image