【发布时间】:2014-07-13 22:16:24
【问题描述】:
鉴于提供的(非常简单的)生成器,是否可以将生成器恢复到其原始状态以再次使用?
var generator = function*() {
yield 1;
yield 2;
yield 3;
};
var iterable = generator();
for (let x of iterable) {
console.log(x);
}
// At this point, iterable is consumed.
// Is there a method for moving iterable back
// to the start point by only without re-calling generator(),
// (or possibly by re-calling generator(), only by using prototype
// or constructor methods available within the iterable object)
// so the following code would work again?
for (let x of iterable) {
console.log(x);
}
我希望能够将可迭代对象传递给其他范围,对其进行迭代,做一些其他事情,然后稍后在同一范围内再次对其进行迭代。
【问题讨论】:
-
不按照目前的草案:people.mozilla.org/~jorendorff/…
-
顺便说一句,
for (let x in iterable)不应该是for (let x of iterable)吗? -
是的,你是对的——我会更新代码。
-
作为其他阅读本文的人的说明,我目前正在使用以下解决方法(不一定是解决方案)。通过在生成器函数原型上创建一个@@iterator 属性,该属性在访问时自动执行,返回底层生成器的@@iterator,我基本上可以循环遍历生成器函数。最终结果是我可以根据需要迭代生成器函数,允许它自动为我创建底层生成器。至于为什么 ES6 默认不包含这个功能,我不确定……
-
迭代器有状态,而不是生成器。你调用生成器给你一个迭代器,一旦它被消耗,你再次调用生成器再次迭代。
标签: javascript generator ecmascript-harmony ecmascript-6