我想编写一个简单的生成器,以通过调用next
获得增加的值
> var gg = next_id();
> function* next_id() {
var current_id = 1;
yield current_id;
current_id ++;
return current_id;
}
> gg.next()
Object {value: 1, done: false}
> gg.next()
Object {value: 2, done: true}
> gg.next()
Object {value: undefined, done: true}
> gg.next()
Object {value: undefined, done: true}
为什么这个生成器只生成2个值?
然后我更改了代码
function* next_id() {
var current_id = 1;
while (1) {
yield current_id;
current_id ++;
}
return current_id;
}
它有效,确实让我感到困惑。
最佳答案
因为您只呼叫yield
一次。看来这是您要执行的操作:
function* next_id() {
var index = 0;
while(true)
yield index++;
}
var gen = next_id();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
请参阅生成器here的文档。