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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
Javascript Object.extend
May 18 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 Javascript
js和php如何获取当前url的内容
Sep 22 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
生成二维码方法汇总
Dec 26 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
JavaScript中的setUTCDate()方法使用详解
Jun 11 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 Javascript
Bootstrap开关(switch)控件学习笔记分享
May 30 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
Apr 15 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(6) 面向对象
2010/02/16 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
Javascript的闭包
2009/12/31 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
vue 配置多页面应用的示例代码
2018/10/22 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python生成密码字典的方法
2018/07/06 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
django ORM之values和annotate使用详解
2020/05/19 Python
python和JavaScript哪个容易上手
2020/06/23 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
车间组长岗位职责
2013/12/20 职场文书
自主实习接收函
2014/01/13 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
文体活动总结
2015/02/04 职场文书
自我推荐信格式模板
2015/03/24 职场文书
Python读写yaml文件
2022/03/20 Python