全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ES6中Generator与异步操作实例分析

本文实例讲述了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小时内与您取得联系。