本文实例讲述了ES6中Generator与异步操作。分享给大家供大家参考,具体如下:
Generator与异步操作
1.Generator概念
可以把Generator理解成一个状态机(好像React中有很多state),封装了多个内部状态。执行Generator返回的是一个遍历器对象,可以遍历Generator产生的每一个状态。在function后加*就可以声明一个Generator函数。
function* hiGenerator(){ yield 'hi'; yield 'ES5'; return '!'; } var hi = hiGenerator(); console.log(hi); //hiGenerator {[[GeneratorStatus]]: "suspended", [[GeneratorReceiver]]: Window} console.log(hi.next()); //Object {value: "hi", done: false} console.log(hi.next()); //Object {value: "ES5", done: false} console.log(hi.next()); //Object {value: "!", done: true}
2.yield语句
由于Generator函数返回的遍历器对象,只有调用next()方法才会遍历到下一个状态,所以其实提供了一种可以暂停的执行函数。每次执行next(),遇到yield语句就暂停执行,且将yield后的表达式的值作为返回的对象的value值;如果没有遇到yield,则返回return语句作为返回对象的value值;如果没有return,则返回对象的value值为undefined。
3.next方法
next()方法可以带一个参数,该参数会被当做上一条yield语句的返回值。
function* add(c, d){ var a = 0; a = yield a + c; a = yield a + d; return } var sum = add(1, 2); console.log(sum); //add {[[GeneratorStatus]]: "suspended", [[GeneratorReceiver]]: Window} console.log(sum.next()); //Object {value: 1, done: false} console.log(sum.next()); //Object {value: NaN, done: false} console.log(sum.next()); //Object {value: undefined, done: true}
如果不给next()传参,会使得下一步计算无法进行。
function* add(c, d){ var a = 0; a = yield a + c; a = yield a + d + 1; return } var sum = add(1, 2); console.log(sum); //add {[[GeneratorStatus]]: "suspended", [[GeneratorReceiver]]: Window} console.log(sum.next()); //Object {value: 1, done: false} console.log(sum.next(1)); //Object {value: 4, done: false} console.log(sum.next(3)); //Object {value: undefined, done: true}
4.用for..of...遍历Generator
用for..of...遍历Generator时候,不需要显示调用next()方法。
5.一个Generator函数产生的遍历器对象g调用return方法后,返回对象的value属性为return方法的参数。
6.在一个Generator函数内部调用另一个Generator函数。需要使用yield*。
希望本文所述对大家ECMAScript程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 外媒:《死亡岛2》或是今年PS+2档最受欢迎游戏
- 群星.1997-世纪之歌第二辑6CD【宝丽金】【WAV+CUE】
- 邵萱.1997-是是非非【捷登】【WAV+CUE】
- 巫启贤.1998-我是你的【风格】【WAV+CUE】
- 【原神手游】「月草的赐慧」祈愿
- 【原神手游】「赤团开时」祈愿
- 【原神手游】「法器·千夜浮梦」介绍
- 陈立农《青春为名 上部曲 - 恋》[FLAC/分轨][290.58MB]
- 张乔西《明星》[320K/MP3][55.23MB]
- 张乔西《明星》[FLAC/分轨][143.08MB]
- 《P3R:Episode Aegis》:重复爬塔的悲伤
- 《公会传说:遗落的世界》EA版评测:怀旧感CRPG还在追我
- 诛仙老玩家会喜欢《诛仙世界》吗?
- ABC唱片-《母帶直刻神奇黑胶CD》[FLAC+CUE]
- 柏菲·李一凤《真爱过关》限量开盘母带ORMCD[低速原抓WAV+CUE]