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 相关文章推荐
学习YUI.Ext 第二天
Mar 10 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
JavaScript中使用指数方法Math.exp()的简介
Jun 15 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
Nov 02 Javascript
Javascript 实现简单计算器实例代码
Oct 23 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
react项目实践之webpack-dev-serve
Sep 14 Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 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中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP实现合并discuz用户
2015/08/05 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
js 目录列举函数
2008/11/06 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Python中的is和id用法分析
2015/01/26 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
浅谈五大Python Web框架
2017/03/20 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python处理csv中的空值方法
2018/06/22 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python3安装speech语音模块的方法
2018/12/24 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
python多进程并行代码实例
2019/09/30 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
捐书寄语赠言
2014/01/18 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
身份证丢失证明
2015/06/19 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL