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 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
javascript scrollTop正解使用方法
Nov 14 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
Async Validator 异步验证使用说明
Jul 03 Javascript
详解Node全局变量global模块
Sep 28 Javascript
理解Koa2中的async&await的用法
Feb 05 Javascript
vuejs点击class变化的实例
Sep 05 Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
vue实现图片裁剪后上传
Dec 16 Vue.js
微信公众号菜单配置微信小程序实例详解
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
SONY ICF-F10中波修复记
2021/03/02 无线电
用PHP查询域名状态whois的类
2006/11/25 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
js 函数调用模式小结
2011/12/26 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
vue下跨域设置的相关介绍
2017/08/26 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
python的常见命令注入威胁
2013/02/18 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
python tkinter窗口最大化的实现
2019/07/15 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
华润集团网上药店:健一网
2016/09/19 全球购物
新闻专业毕业生英文求职信
2014/03/19 职场文书
社区禁毒工作方案
2014/06/02 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
员工担保书范本
2015/09/22 职场文书