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 *后跟已有生成器即可实现, 生成器和迭代器可创建外观清晰的异步代码

原文地址:https://www.cnblogs.com/idiv/p/8483333.html