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 相关文章推荐
Wordpress ThickBox 添加“查看原图”效果代码
Dec 11 Javascript
读jQuery之四(优雅的迭代)
Jun 20 Javascript
jQuery中setTimeout的几种使用方法小结
Apr 07 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
Dec 29 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
Mar 12 Javascript
JS实现拼图游戏
Jan 29 Javascript
vue路由权限校验功能的实现代码
Jun 07 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
PHP PDO操作总结
2014/11/17 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
学习Node.js模块机制
2016/10/17 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Django与JS交互的示例代码
2017/08/23 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python dumps和loads区别详解
2020/02/04 Python
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
庆中秋节主题活动方案
2014/02/03 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
高质量“欢迎词”
2019/04/03 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书