es6 generator 基础知识
1、定义和使用
function *gen() {
return 'first generator';
}
// 有点类似类的实例化过程
let generatorResult = gen()
// 核心方法next
generatorResult.next() // {value: "first generator", done: true}
// Generator 如同一个序列:一旦序列中的值被消费,你就不能再次消费它。
generatorResult.next() // undefined
2、next() / value
function *gen() {
yield 'fitst';
yield 'second';
yield 'third';
}
let genResult = gen();
genResult.next().value // first
genResult.next().value // second
genResult.next().value // third
3、for ... of ...
function *gen() {
yield 'fitst';
yield 'second';
yield 'third';
}
for (const value of gen()) {
console.log(value);
}
// fitst
// second
// third
4、next() 往 generator 中赋值
function *gen() {
var firstname = yield;
var secondname = yield;
console.log(firstname + secondname);
}
var genResult = gen()
genResult.next()
genResult.next('Mr. ')
genResult.next('Right') // Mr. Right
// 解释一下,由于yield可以理解为暂停器。
// 当第一次调用 next 时,代码将返回并且暂停于此: var firstname = yield;
// 有趣的事情发生在第二次调用 next 时: genResult.next('Mr. ')。
// 此时我们向 next 调用传入了值!Generator将从上一次暂停中恢复,并且 yield将被 "Mr. " 替换。因此firstname的值变成'Mr. '
// 然后继续执行,而又遇到yield处再次暂停: genResult.next('Right')
// 第三次调用 next: genResult.next('Right')
// 同前面一样,传入的 'Right' 将替换 yield,并在赋值完后继续执行。
// 由于没有yield了。所以正常执行了: genResult.next('Right') // Mr. Right
5、使用gen异步操作
let gen;
let getDataOne = () => {
setTimeout(function () {
gen.next('one')
}, 1000);
}
let getDataTwo = () => {
setTimeout(function () {
gen.next('two')
}, 1000);
}
function *main() {
let dataone = yield getDataOne();
let datatwo = yield getDataTwo();
console.log(dataone, datatwo);
}
gen = main();
gen.next(); // {value: undefined, done: false}
// 1秒后输出: one two
es6 generator 基础知识的更多相关文章
- ES6 generator 基础
参考文档 harmony:generators Generator是ES6的新特性,通过yield关键字,可以让函数的执行流挂起,那么便为改变执行流程提供了可能. 创建Generator functi ...
- es2015(es6)基础知识整理(更新中...)
1.let let可以声明块级作用域变量 'use strict'; if (true) { let app = 'apple'; } console.log(app); //外面是访问不到app的 ...
- ES6的基础知识总结
一. ES6 ES6中定义变量使用 let/const let 使用let定义的变量不能进行"变量提升" 同一个作用域中,let不能重复定义相同的变量名 使用var在全局作用域中定 ...
- ES6的基础知识(一)
1.ECMAScript 6.0(以下简称ES6). 2.ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的其中一种实现. 3.对ES6支持的浏览器:超过 90% ...
- ES6 Generator的应用场景
一.基础知识 API文档 ES6 诞生以前,异步编程的方法,大概有下面四种. 回调函数 事件监听 发布/订阅 Promise 对象 Generator 函数将 JavaScript 异步编程带入了一个 ...
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- 性能测试学习 第九课--LR12中controller基础知识
1.设计手工场景,理解集合点的策略 2.添加load generator 一.controller基础知识 1.controller的原理 通过场景设计来模拟用户的真实操作并调用vugen中的脚本,然 ...
- javascript基础知识笔记-自用
笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...
- React Native 入门基础知识总结
中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...
随机推荐
- procedure
create or replace procedure get_username as begin v_id in number:=1 select * from uc_t_staff t where ...
- 连接SDE空间数据库——SQL Server篇
一.软件配置 要从 ArcMap 连接至 SQL Server 中的数据库或地理数据库,请在 ArcMap 计算机上安装 SQL Server native client 或 Microsoft OD ...
- UVA 10700 Camel trading 无括号的表达式 贪心
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范 ...
- Hibernate(十五)注解
一.Hibernate注解 使用注解的方式来注释类和属性,从而完成对象和关系的映射 二.步骤 三.注解标签 四.查询
- Spring boot发送邮件
最近接到一个需求:分配任务给用户时,发送邮件提醒用户. 后端应该和Andorid一样有现成的api支持,浏览器里搜索了下,果不其然,很轻松就实现了这个功能,现在记录下. 首先添加Maven依赖 < ...
- 美国程序猿(软件project师)平均年薪状况调查
来源站点:Indeed.com&computerengineeringsalarydata.com Average Software Engineer Salary by 50 States ...
- Linux rpm安装MySQL
1:查看操作系统信息 ##uname -a : 准备软件包: MySQL-server-5.6.19-1.rhel5.x86_64.rpm MySQL-devel-5.6.19-1.rhel5.x86 ...
- jdeveloper优化:
D:\jdevstudio10133\jdev\bin\jdev.conf末尾加上下面的AddVMOption -Dsun.java2d.noddraw=true AddVMOption -Dsun. ...
- gzip和zipfile模块
# -*- coding: utf-8 -*- #python 27 #xiaodeng #gzip和zipfile模块 #http://www.open-open.com/lib/view/open ...
- Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程
Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序 ...