zoukankan      html  css  js  c++  java
  • ES6生成器与迭代器

    ES6迭代器的一个例子

    function run(taskDef) {
    	var task = taskDef();
    	var result = task.next();
    	// 递归执行迭代
    	function step() {
    		if(result.done) return;
    
    		result.value(function(txt) {
    			console.log(txt);
    			result = task.next();
    			step();
    		});
    	}
    
    	step();
    }
    
    function *a() {
    	yield function (cb) {
    		setTimeout(function () {
    			cb('第一次异步');
    		}, 1000);
    	};
    }
    
    function b() {
    	return function (cb) {
    		setTimeout(function () {
    			cb('第二次异步');
    		}, 1000);
    	};
    }
    
    run(function *() {
    	console.log('异步开始执行...');
    	// a, b都是异步代码, 在这却以同步顺序
    	yield *a();
    	yield b();
    	console.log('完成了!');
    });
    

    这个例子包含了生成器委托, 异步迭代器, 迭代器是ES6发布的很重要的一个功能, 可用Symbol.iterator定义对象的生成器, 只有具备Symbol.iterator的对象才是可迭代对象, 字符串也具有一个默认的迭代器, 扩展运算符...会受到Symbol.iterator的影响, 生成器委托促进了对迭代器行为的良好封装, 能够重用已有生成器, 使用yield *后跟已有生成器即可实现, 生成器和迭代器可创建外观清晰的异步代码

  • 相关阅读:
    cf854B Maxim Buys an Apartment
    Snuke's Coloring 2-1
    P1087 FBI树
    Card Game for Three
    Many Formulas
    排队
    苹果消消乐(尺取法)
    猴子选大王(约瑟夫)
    进制转化
    UIProgress控件的属性和方法
  • 原文地址:https://www.cnblogs.com/idiv/p/8483333.html
Copyright © 2011-2022 走看看