我有一个问题,我不知道我做错了什么。
工作示例:
function* range(start) {
let value = +start;
while (true) {
const str = "" + value;
yield "0".repeat(start.length - str.length) + str;
value++;
}
}
function GenerateNumber(str) {
var iterator = range(str);
var interval = setInterval(() => {
console.log(iterator.next().value);
}, 1100);
}
GenerateNumber("0137");
非工作示例:
function* range(start) {
let value = +start;
while (true) {
const str = "" + value;
yield "0".repeat(start.length - str.length) + str;
value++;
}
}
function repeat(str) {
setTimeout(function() {
console.log(str);
GenerateNumber(str);
}, 1500);
}
function GenerateNumber(str) {
var iterator = range(str);
repeat(iterator.next().value);
}
GenerateNumber("0137");
正如您在第一个示例中看到的那样,数字按其应有的方式增加,但是当我尝试在每个函数调用上增加数字时,它显示相同的值。即使我将 .next().value 设置为函数参数。
最佳答案
每次调用 GenerateNumber()
时,您都会创建一个新的迭代器,从头开始:
function GenerateNumber(str) {
var iterator = range(str); // <-- creates a brand new iterator
repeat(iterator.next().value);
}
您需要在同一个迭代器上不断调用next()
。例如,如果您检查iterator
是否已分配:
function* range(start) {
let value = +start;
while (true) {
const str = "" + value;
yield "0".repeat(start.length - str.length) + str;
value++;
}
}
function repeat(str) {
setTimeout(function() {
console.log(str);
GenerateNumber(str);
}, 1500);
}
var iterator
function GenerateNumber(str) {
iterator = iterator || range(str); // << -- do we alreay have an iterator?
repeat(iterator.next().value);
}
GenerateNumber("0137");
关于javascript - 从函数*(生成器)中获得相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227475/