ES6中Generator与异步操作实例分析


Posted in Javascript onMarch 31, 2017

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
javascript中substr,substring,slice.splice的区别说明
Nov 25 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
使用jQuery重置(reset)表单的方法
May 05 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
Oct 11 Javascript
jQuery实现的输入框选择时间插件用法实例
Feb 28 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
js编写简单的计时器功能
Jul 15 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 #Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 #Javascript
node.js平台下的mysql数据库配置及连接
Mar 31 #Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 #Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 #Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 #Javascript
JavaScript函数柯里化原理与用法分析
Mar 31 #Javascript
You might like
解析PHP工厂模式的好处
2013/06/18 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
js实现数字滚动特效
2019/12/16 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
Python元组及文件核心对象类型详解
2018/02/11 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
十佳教师事迹材料
2014/01/11 职场文书
2014年文秘工作总结
2014/11/25 职场文书
写景作文评语集锦
2014/12/25 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js