国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

generator對(duì)象

2024-04-27 15:06:37
字體:
供稿:網(wǎng)友

1、generator對(duì)象

Generator函數(shù)是ES6提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。Generator的中文翻譯是生成器,它是ECMAScript6(代號(hào)harmory)中提供的新特性。在過去,封裝一段運(yùn)算邏輯的單元是函數(shù)。函數(shù)只存在“沒有被調(diào)用”或者“被調(diào)用”的情況,不存在一個(gè)函數(shù)被執(zhí)行之后還能暫停的情況,而Generator的出現(xiàn)讓這種情況成為可能。

2、generator對(duì)象定義

Generator的定義十分簡(jiǎn)單,與普通的函數(shù)相比,它只多出一個(gè)*號(hào)。以下為簡(jiǎn)單例子:

function *dowork(a) { var sum = yield a + 2; sum = yield a + 4; sum = yield a + 5;}var gen = dowork(10);console.log(gen.next());======{ value: 12, done: false }

在dowork函數(shù)中通過yield關(guān)鍵字讓程序暫停在當(dāng)前位置,通過generator.next()單步執(zhí)行,next返回一個(gè)對(duì)象包括value和done,value為當(dāng)前程序的計(jì)算結(jié)果,而done則表示程序是否執(zhí)行完成。

3、generator與異步操作

上一級(jí)講了PRomise對(duì)象與異步操作,其實(shí)在ES6中也可以用generator來處理異步操作。

function *doWork() { var url = 'http://www.163.com'; var url1 = 'http://www.sina.com'; var result = yield fetch(url); var result1 = yield fetch(url1); console.log(result1);}var generator = doWork();var ret = generator.next();ret.value.then(function (data) { var ret1 = generator.next(data); ret1.value.then(function (data) { generator.next(data); })});

fetch函數(shù)是一個(gè)異步執(zhí)行函數(shù),返回promise對(duì)象,整個(gè)doWork函數(shù)由兩個(gè)異步函數(shù)構(gòu)成最后打印其中一個(gè)異步函數(shù)的結(jié)果,由于每個(gè)next返回的是promise對(duì)象因此需要在then中處理數(shù)據(jù)。

4、優(yōu)化流程

generator實(shí)現(xiàn)異步可以讓代碼變得更線性,但是調(diào)用過程還是比較麻煩的,因此可以模仿tj大神的co框架(https://github.com/tj/co) 的原理開發(fā)一個(gè)簡(jiǎn)易控制流函數(shù),暫且名字也取為co。

function co(generator) { var gen = generator.next(); var next = function (gen) { if (!gen.done) { if (gen.value instanceof Promise) { gen.value.then(function (data) { next(generator.next(data)); }) } else { next(generator.next(data)); } } } next(gen);}// 執(zhí)行co(doWork());

通過co包裝的異步方法可以非常簡(jiǎn)單的執(zhí)行,編程體驗(yàn)接近與java


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 松桃| 综艺| 蒙山县| 清水河县| 大同市| 马公市| 张掖市| 乌恰县| 辽阳市| 安平县| 黔西| 常熟市| 基隆市| 班玛县| 湖南省| 余江县| 孟村| 诸暨市| 龙游县| 上饶县| 库车县| 朝阳市| 灵丘县| 东乌珠穆沁旗| 河曲县| 拜城县| 长寿区| 乐山市| 中江县| 东港市| 徐闻县| 武乡县| 新田县| 乐清市| 体育| 卢氏县| 海兴县| 平遥县| 农安县| 河北区| 江达县|