我想编写一个简单的生成器,以通过调用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的文档。

10-04 22:46
查看更多