我需要在每次调用后返回递增整数的实体。
例如我有代码。
var id = 0; //global variable =(
function foo() {
....
console.log("Your unique ID is " + id++);
....
}
它工作正常。但我想使用发电机进行这项工作。
类似的东西:
function* getId() {
var id = 0;
while (true) {
yield id++;
}
}
function foo() {
....
console.log("Your unique ID is " + getId());
....
}
但结果只是空图引号。我错过了什么?也许使用发电机对于这类发电来说是一个坏主意?
答案 0 :(得分:8)
你的getId
是一个生成器函数,它创建一个生成器,而不是前进并获取其值
你应该做点什么
function* IdGenerator() {
var i = 0;
while (true) {
yield i++;
}
}
IdGenerator.prototype.get = function() {
return this.next().value;
};
var ids = IdGenerator();
function foo() {
…
console.log("Your unique ID is " + ids.get());
…
}
答案 1 :(得分:3)
以下是我能说的错误:
next().value
以下是一个例子:
function* getId() {
var id = 0;
while (true) {
yield id++;
};
}
var itId = getId();
function foo() {
console.log("Your unique ID is " + itId.next().value);
}
foo()
foo()

答案 2 :(得分:1)
如果你......
然后,在这种情况下,关闭增量变量的 IIFE 可能会比function*
更好地服务
var getId = (function () {
var i = 0;
return () => i++;
}());
getId(); // 0
getId(); // 1
getId(); // 2