全网整合营销服务商

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

免费咨询热线: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 


相关文章: 企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  网站制作需要会哪些技术,建立一个网站要花费多少?  C++中引用和指针有什么区别?(代码说明)  ,制作一个手机app网站要多少钱?  如何通过宝塔面板实现本地网站访问?  如何设置并定期更换建站之星安全管理员密码?  如何选择高效稳定的ISP建站解决方案?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  C#如何使用XPathNavigator高效查询XML  导航网站建站方案与优化指南:一站式高效搭建技巧解析  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  建站主机选哪家性价比最高?  如何制作网站标识牌,动态网站如何制作(教程)?  上海网站制作开发公司,上海买房比较好的网站有哪些?  电商网站制作公司有哪些,1688网是什么意思?  如何通过虚拟主机快速完成网站搭建?  电商网站制作价格怎么算,网上拍卖流程以及规则?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何挑选优质建站一级代理提升网站排名?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  宝塔建站后网页无法访问如何解决?  如何基于云服务器快速搭建网站及云盘系统?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  深圳网站制作培训,深圳哪些招聘网站比较好?  如何快速搭建高效香港服务器网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何在云服务器上快速搭建个人网站?  如何快速查询网址的建站时间与历史轨迹?  网站制作员失业,怎样查看自己网站的注册者?  制作电商网页,电商供应链怎么做?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  简历在线制作网站免费版,如何创建个人简历?  济南专业网站制作公司,济南信息工程学校怎么样?  如何确保西部建站助手FTP传输的安全性?  linux top下的 minerd 木马清除方法  建站之星如何保障用户数据免受黑客入侵?  太原网站制作公司有哪些,网约车营运证查询官网?  北京制作网站的公司,北京铁路集团官方网站?  seo网站制作优化,网站SEO优化步骤有哪些?  广州建站公司哪家好?十大优质服务商推荐  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何在阿里云域名上完成建站全流程?  如何基于云服务器快速搭建个人网站?  公司网站的制作公司,企业网站制作基本流程有哪些?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何制作算命网站,怎么注册算命网站?  广州美橙建站如何快速搭建多端合一网站?  ,网页ppt怎么弄成自己的ppt?  如何在建站主机中优化服务器配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。