Получение такого же выхода из функции * (генератор)

У меня проблема, и я не знаю, что я делаю неправильно.

Рабочий пример:

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");

Как видно в первом примере, числа увеличиваются, как и следовало ожидать, но когда я пытаюсь увеличить число при каждом вызове функции, оно отображает одно и то же значение. Даже если я установил значение .GenerateNumber (). Как параметр функции.

javascript,jquery,

0

Ответов: 1


1 принят

Вы создаете новую функцию GenerateNumber ( str ) { var iterator = range ( str ); // <- создает новый повторитель итератора ( iterator . next (). value ); } каждый раз вызывается, который начинается с начала: next()

iterator

Вам нужно продолжать использовать 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, JQuery,
Похожие вопросы