本文实例讲述了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程序设计有所帮助。
# ES6
# Generator
# 异步操作
# JS基于ES6新特性async await进行异步处理操作示例
# ES6 javascript的异步操作实例详解
# 微信小程序 es6-promise.js封装请求与处理异步进程
# ES6的Fetch异步请求的实现方法
# 详解ES6 系列之异步处理实战
# 详解ES6中的三种异步解决方案
# 详解ES6之async+await 同步/异步方案
# ES6记录异步函数的执行时间详解
# JS ES6异步解决方案
# 遍历
# 如果没有
# 的是
# 多个
# 不需要
# 才会
# 中有
# 给大家
# 不给
# 装了
# 所述
# 程序设计
# 值为
# 就可以
# 后加
# 返回值
# 讲述了
# 上一条
# state
# React
相关文章:
如何在万网开始建站?分步指南解析
网站制作软件有哪些,制图软件有哪些?
建站之星备案流程有哪些注意事项?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
中山网站推广排名,中山信息港登录入口?
如何在IIS7中新建站点?详细步骤解析
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站主机如何安装配置?新手必看操作指南
如何用西部建站助手快速创建专业网站?
股票网站制作软件,网上股票怎么开户?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站中国官网:模板定制+SEO优化+建站流程一站式指南
C++时间戳转换成日期时间的步骤和示例代码
建站之星如何一键生成手机站?
,交易猫的商品怎么发布到网站上去?
如何选择高性价比服务器搭建个人网站?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何在局域网内绑定自建网站域名?
已有域名和空间,如何快速搭建网站?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何挑选高效建站主机与优质域名?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建站之星如何通过成品分离优化网站效率?
如何在搬瓦工VPS快速搭建网站?
Python lxml的etree和ElementTree有什么区别
家庭建站与云服务器建站,如何选择更优?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
建站VPS能否同时实现高效与安全翻墙?
三星网站视频制作教程下载,三星w23网页如何全屏?
建站主机CVM配置优化、SEO策略与性能提升指南
如何在阿里云完成域名注册与建站?
,在苏州找工作,上哪个网站比较好?
孙琪峥织梦建站教程如何优化数据库安全?
PHP 500报错的快速解决方法
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何选择网络建站服务器?高效建站必看指南
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
智能起名网站制作软件有哪些,制作logo的软件?
SQL查询语句优化的实用方法总结
建站DNS解析失败?如何正确配置域名服务器?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何用wdcp快速搭建高效网站?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何快速搭建支持数据库操作的智能建站平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。