详谈Generator
Generator究竟有什么样的作用呢????
- 他是ES6提出的一个解决异步问题方案
先看一段代码, 感受一下generator函数和普通函数的区别
function* test(){
yield 2;
yield 3;
yield 5;
}
var app = test() // 此时代码不会执行
var a = app.next() // 这个时候代码才开始真正开始执行
console.log(a) // {value:2,done:false}
var b = app.next() // 继续执行
console.log(b) // {value:3,done:false}
var b = app.next() // 最后一步
console.log(b) // {value:5,done:true}
从上面的代码可以看出来,generator可以让函数在写的时候停止运行,就好比我们在打断点的时候,那么我就在想,如果我写异步函数是不是也可以让他停止呢,激动的我赶紧试了一下
function* getTime(){
//这里我就用axios打个比方,就不写一段promise了,大家理解这里可以放一个promise就行
yield axios.get('xxxxx')
}
var app = getTime()
app.next() // {value,done} 这里面的value就是返回的axios数据
- 总结一下,那么generator就是针对异步的一种解决方法
- 既然了解了他的用处,那么我们就来好好学习一下如何去使用他
使用Promise
- Promise的书写规范是什么
// 在写函数的时候必须用一个*
function* add(){}
function *add(){}
// 那么在es6之后函数可以写成
get(){
...
}
//所以还有另外一种写法
*get(){
}
- Promise如何使用
这时候需要了解一个关键字 yield 这个关键字必须在generator函数内,就好比await必须用在async内部一样
var app = test() //test是一个generator函数
app.next() //会把程序中的yield后面的值拿出来,并且吧yield后面的数据传递给返回的对象的value中
//例如
function *test(){
yield 2
}
test().next() //test()本身不会执行,当调用next的时候才会执行,就是返回一个对象 {value:2,done:true}
//再理解一下,yield后面的值赋给了value,done是指generator函数后面还存在return或者yield等程序,就是后面时候还有代码段
- 那么我们会写generator函数了,并且也会调用了
- 如果还能传递参数了,那么我们这个函数岂不是用起来很完美么
function* test(){
console.log('程序开始了')
console.log(`1.${yield}`) //这里面我们使用es6的字符串插值方式
console.log(`2.${yield}`) //这里面我们调用
}
var app = test() //这个时候只是让app变成一个指向generator函数的指针,并不会打印出值来
app.next()
app.next('第一步')
app.next('第二步')
//接下来就是打印的结果了
程序开始执行了
1.第一步
2.第二步
- 分享不易,感谢关注
详谈Generator的更多相关文章
- EasyMesh - A Two-Dimensional Quality Mesh Generator
EasyMesh - A Two-Dimensional Quality Mesh Generator eryar@163.com Abstract. EasyMesh is developed by ...
- 轻量级“集合”迭代器-Generator
Generator是PHP 5.5加入的新语言特性.但是,它似乎并没有被很多PHP开发者广泛采用.因此,在我们了解PHP 7对Generator的改进之前,我们先通过一个简单却显而易见的例子来了解下G ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- 深入解析js异步编程利器Generator
我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...
- mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...
- ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始化.多语言.automapper自动注 ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- JavaScript RegExp 基础详谈
前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究.学习.掌握,而是抱着需要的时 ...
- OData Client Code Generator
转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...
随机推荐
- ElasticSearch Cardinality Aggregation聚合计算的误差
使用ES不久,今天发现生产环境数据异常,其使用的ES版本是2.1.2,其它版本也类似.通过使用ES的HTTP API进行查询,发现得到的数据跟javaClient API 查询得到的数据不一致,于是对 ...
- salt-api 配置使用
salt-api 安装 配置源 (系统环境s示例是centos6) epel 源 rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/epel/6/i386/ ...
- 货物运输 51Nod - 1671
公元2222年,l国发生了一场战争. 小Y负责领导工人运输物资. 其中有m种物资的运输方案,每种运输方案形如li,ri.表示存在一种货物从li运到ri. 这里有n个城市,第i个城市与第i+1个城市相连 ...
- 关于Qt画点及计算机专业基础课程介绍
在计算机图形图像学中,开始都是先画点,我曾经在汇编上tc2.0上画点,后来是MFC,VB,Qt,Python,我觉得对于计算机专业的选择QT的原因是它是个C系的功能强大庞大的库,可以少写很多代码,但是 ...
- Vue中音乐播放器
一.安装依赖 yarn add vue-aplayer or` npm i vue-aplayer 二.使用 <template> <div class="vue_ap ...
- Windows系统调用中的系统服务表描述符
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表描述符 在前面,我们将解过 ...
- Java编程思想——第17章 容器深入研究 读书笔记(二)
五.List的功能方法 排除Collection已包含的方法外还增加了 boolean addAll(int index, Collection<? extends E> c);从索引位置 ...
- Win10安装gcc、g++、make
下载安装包: 1. MinGW官网下载:http://www.mingw.org 点击右上角Downloads 点击下载 mingw-get-setup.exe 2. 百度网盘(2 ...
- Python之random模块和time模块
1.random()模块的使用 import random x = random.random() y = random.random() print(x,y*10) #random.random ...
- 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的 ...