我有问题,我不知道自己在做错什么。
工作示例:
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设置为函数参数。
答案 0 :(得分:1)
每次调用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");