学些ES6:generator

Generator:

创建:

function* g() {} // g: [object Generator]

let g = function*() {};

let obj = {
*g() {}
};

const generatorName = ‘g‘;
let obj = {
*[generatorName]() {}
};

const generatorName = ‘g‘;
class Klazz {
*[generatorName]() {}
}

iterator:

const generatorFunction = function* (){
yield 1;
yield 2;
};

let generator = new generatorFunction();

typeof generator // object

typeof generator[Symbol.iterator]; // function

let a = ‘‘;
function iterateForOf(){
for (let value of generator) {
a += value; // a: ‘12‘
}
}

yield:

function* generatorFunction() {
yield ‘hello‘;
yield ‘world‘;
}

let generator = generatorFunction();

let values = Array.from(generator); // [‘hello‘, ‘world‘]

let thisStep = generator.next();
let [value, done] = [thisStep.value, thisStep.done]; // hello, false

let thatStep = generator.next();
let [value, done] = [thisStep.value, thisStep.done]; // world, false

generator.done // true

function* fibonacci() {
let a = 0, b = 1;
//1, 2
while(true) {
yield a;
a = b;
b = a + b;
}
}

参数:

function* generatorFunction(v) {
yield v;
}

let iterator = generatorFunction(3);
assert.equal(iterator.next().value, 3);
assert.equal(iterator.next(2).value, 2);
});

function* ticketGenerator(){ // 不断递增,知道.next传入true

for(var i=0; true; i++){

var reset = yield i;

if(reset) {i = -1;}

}

}

替代callback:

function run(generatorFunction) { var generatorItr = generatorFunction(resume); function resume(callbackValue) { generatorItr.next(callbackValue); } generatorItr.next()
}

run(function* myDelayedMessages(resume) {

console.log(yield delay(1000, resume));

console.log(yield delay(1200, resume));

})

时间: 2024-10-11 09:26:36

学些ES6:generator的相关文章

学些ES6:Destructuring

Destructuring: 数组: let [firstValue] = [1]; // firstValue: 1 let c, d;let [a, b] = [c, d] = [1, 2]; var [head, ...tail] = [1, 2, 3, 4]; // tail: [2,3,4] 可以交换变量: let [x, y] = ['ax', 'why'];[x, y] = [y, x]; // x: why, y:ax const all = ['ax', 'why', 'zet

学些ES6:反射

Reflect: 基础: let Class = class {}; Reflect.construct(Class) instanceof Class // true let obj = {x: 23}; Reflect.get(obj, 'x') // 23 Reflect.has(obj, 'x') // true apply: 执行函数: let fn = () => {return 42;}; Reflect.apply(fn) // 42 指定context: class Fourt

学些ES6:类

类(class): class关键词: let TestClass = class {};const instance = new TestClass(); {class Inside {}} typeof Inside // undefined: block scoped 方法与constructor: class User {constructor(id) {this.id = id;} sayHello(){return 'hello'+this.id;}}const user = new

学些ES6:Map

Map: 初始化: const mapSize = (new Map()).size; // mapSize: 0 const pair1 = [1, 'one']; const pair2 = [2, 'two']; const map = new Map([pair1, pair2]); // new Map().set(...pair1).set(...pair2); // 以最后设的值为准: const pair1 = [1, 'one']; const pair2 = [1, 'uno

运维工程师该干什么学些什么?[致菜鸟]

很多刚学linux运维的朋友,总是搞不懂,运维工程师工作中干些啥?学的这些东西有什么用?今日我特来总结总结,希望能帮助即将跨入该行的人形成一个整体的思路.下面红色字体代表所要掌握的LInux免费开源工具. 运维工程师干些什么 总结两句话 1.  保障业务长期稳定运行(如网站服务器.游戏服务器等等). 2.  保障数据安全可靠(如用户名密码.游戏数据.博客文章.交易数据等等). 由这两句话推演运维工程师要学些什么 一.保障业务长期稳定运行 出一点点差错,用户就要投诉了. 1.业务跑在什么上面? 网

「01」机器学习,到底在学些什么?

阅读 0 编辑文章 大家好,欢迎来到久违的机器学习系列,这是「美团」算法工程师带你入门机器学习 专栏的第一篇文章,不会太长,一半聊想法,一半聊干货.熟悉我的朋友可能知道,我以前的文章比较随意,涉及的内容极广,包括但不限于Python/Java/C/C++,网络编程,Hadoop等,但主要核心还是机器学习算法和数据科学相关的主题,这一点没变过. 最近认真总结和思考了之前的博客内容,决定将自己从入门到现在一路走来的学习经验和理解整理一番,帮助更多后来的小伙伴更好的入门,所以就有了这个系列.以前的知乎

es6 generator 函数中的yield理解

es6 generator 的yield理解 原文地址:https://www.cnblogs.com/malong1992/p/12129561.html

ES6 Generator 学习笔记一

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态.  执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态. 形式上,Generator 函数是一个普通函数,但是有两个特征.一是,f

ES6 Generator函数

Generator函数是es6提供的解决异步编程的方案之一:Generator函数是一个状态机,内部封装了不同状态的数据: <script type="text/javascript"> // generator定义 function后面跟个*号 function* myGenerator(){ console.log('业务逻辑A') let result=yield 'hello' console.log(result) console.log('业务逻辑B') yie