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 基础知识的更多相关文章

  1. ES6 generator 基础

    参考文档 harmony:generators Generator是ES6的新特性,通过yield关键字,可以让函数的执行流挂起,那么便为改变执行流程提供了可能. 创建Generator functi ...

  2. es2015(es6)基础知识整理(更新中...)

    1.let let可以声明块级作用域变量 'use strict'; if (true) { let app = 'apple'; } console.log(app); //外面是访问不到app的 ...

  3. ES6的基础知识总结

    一. ES6 ES6中定义变量使用 let/const let 使用let定义的变量不能进行"变量提升" 同一个作用域中,let不能重复定义相同的变量名 使用var在全局作用域中定 ...

  4. ES6的基础知识(一)

    1.ECMAScript 6.0(以下简称ES6). 2.ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的其中一种实现. 3.对ES6支持的浏览器:超过 90% ...

  5. ES6 Generator的应用场景

    一.基础知识 API文档 ES6 诞生以前,异步编程的方法,大概有下面四种. 回调函数 事件监听 发布/订阅 Promise 对象 Generator 函数将 JavaScript 异步编程带入了一个 ...

  6. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  7. 性能测试学习 第九课--LR12中controller基础知识

    1.设计手工场景,理解集合点的策略 2.添加load generator 一.controller基础知识 1.controller的原理 通过场景设计来模拟用户的真实操作并调用vugen中的脚本,然 ...

  8. javascript基础知识笔记-自用

    笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...

  9. React Native 入门基础知识总结

    中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...

随机推荐

  1. linux文件系统命令(1)---概述

    一.目的 本系列博文将介绍linux文件系统相关的命令. linux文件系统分为4个层面:用户空间程序.系统调用.内核虚拟文件系统以及实际文件系统.本系列文章仅仅涉及用户空间程序的操作及用法.旨在掌握 ...

  2. windows安装go-sqlite3失败,提示找不到gcc

    windows安装go-sqlite3失败,提示找不到gcc go get github.com/mattn/go-sqlite3时失败,提示exec: “gcc”: executable file ...

  3. RS错误RSV-VAL-0032之项目未在布局中引用的3种解决办法

    如下图所示,我用RS新建了一个空白页面,拖入了一个列表,给该列表新建了一个条件样式 条件样式如下所示,表达式来自查询1 运行,报错如下图所示 原因就是条件样式使用到了查询1中的数据项1但是数据项1在报 ...

  4. Cognos两种建模工具对于复杂日期维度的处理比较(上)

    众所周知,在数据仓库中,日期维度是相当重要的.对数据分析的过程中可以从不同的角度去分析,比如按照下面的日期层次去分析数据. 年-季度-月-日 年-月-日 年-周-日 本示例将利用简单的商品销售分析的d ...

  5. MySQL 动态sql语句运行 用时间做表名

    1. 描写叙述 在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分.可是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比方,有一个表我们想以"2015-07 ...

  6. Python构造字符串

    不断报错 coercing to Unicode : 不要用+连接字符串,要用格式化字符串 None的问题:只能用 or “”的方式来解决了 not all arguments converted d ...

  7. [Backbone]1. Module, View classed

    Welcome to the Anatomy of Backbone.js challenges! We're going to be building a simple Appointment ap ...

  8. boost::tie()和boost::variant()解说

    #include<iostream> #include<boost/tuple/tuple.hpp> #include<boost/variant.hpp> #in ...

  9. getaddrinfo()函数详解

    Socket的地址查询函数 http://blog.sina.com.cn/s/blog_988c054b010139e3.html http://www.cnblogs.com/cxz2009/ar ...

  10. Linux 下搭建流媒体服务器

    http://blog.csdn.net/huangtaishuai/article/details/9836581 ----------------------------------------- ...