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

标签 javascript jquery

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

工作示例:

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/

相关文章:

javascript - Laravel:Ajax 动态依赖下拉列表

javascript - 在使用错误返回异步函数时,避免 Node.JS 中的回调 hell 的常见做法有哪些?

javascript - 如何为其元素将稍后添加类/id 的选择器添加事件监听器?

javascript - 悬停并单击 Jquery

jquery - Node js + 异步返回结果加入数据

javascript - 将 JS setInterval react 到 API

javascript - 无法在表分隔符的 ul 之前插入链接

javascript - Javascript 有包含函数吗?

jQuery 在有 2 个时选择 div。

jQuery : Difference between String selector and function selector?