gpt4 book ai didi

javascript - 从函数*(生成器)中获得相同的输出

转载 作者:行者123 更新时间:2023-12-03 01:32:29 26 4
gpt4 key购买 nike

我有一个问题,我不知道我做错了什么。

工作示例:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com