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 相关文章推荐
使用新的消息弹出框blackbirdjs
Oct 16 Javascript
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
Mar 16 Javascript
JQuery radio(单选按钮)操作方法汇总
Apr 15 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
浅探express路由和中间件的实现
Sep 30 Javascript
JavaScript实现打字游戏
Feb 19 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设计模式之观察者模式实例
2016/02/22 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
php和html的区别点详细总结
2019/09/24 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python CSV模块使用实例
2015/04/09 Python
Python中设置变量访问权限的方法
2015/04/27 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
python程序控制NAO机器人行走
2019/04/29 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
机关会计岗位职责
2014/04/08 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
家属慰问信
2015/02/14 职场文书
公司仓库管理制度
2015/08/04 职场文书