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判断设备是否为PC并调整图片大小
Feb 12 Javascript
javascript中call和apply的用法示例分析
Apr 02 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
简单实现js选项卡切换效果
Feb 09 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
全选复选框JavaScript编写小结(附代码)
Aug 16 Javascript
Node做中转服务器转发接口
Oct 18 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 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守护另一个php进程的例子
2015/02/13 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python sys.path详细介绍
2013/10/17 Python
python实现bucket排序算法实例分析
2015/05/04 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python 实现微信自动回复的方法
2020/09/11 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
技术经理的自我评价范文
2013/12/03 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
总经理检讨书范文
2015/02/16 职场文书
2015初中团委工作总结
2015/07/28 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python