Генератор JavaScript в модуле / пакете - PullRequest
0 голосов
/ 24 августа 2018

У меня возникли проблемы с генераторами, и, надеюсь, вы мне поможете.

Итак, в основном я разделил / написал свои функции в отдельных модулях (пакетах), чтобы было проще обновить мое приложение.

На изображении ниже вы можете понять, что я пытаюсь сделать. По какой-то причине, когда я продолжаю вызывать функцию с .next(), запускается только первый выход.

Код, который работает неправильно

Как я могу запустить другие выходы?

1 Ответ

0 голосов
/ 24 августа 2018

В вашем коде this.sensorGenerator().next() создайте новый генератор каждый раз, когда вы затем вызываете следующую функцию, каждый раз возвращая одно и то же первое значение.

Вам необходимо создать / создать экземпляр вашего генератора и сохранить его в переменнойгде-нибудь, а затем вызвать его следующую функцию.

var gen = this.sensorGenerator(); gen.next(); // first value gen.next(); // second value ...

Вот рабочий фрагмент, показывающий, как это сделать.

const div = document.getElementById("osef");
const obj = {
	_generator: undefined,
	init: function() {
		this._generator = this.sensorGenerator();
		return this.getNextGenValue();
	},
	sensorGenerator: function*() {
		yield 1;
		yield 2;
		yield 3;
		yield 4;
		
		return 5;
	},
	getNextGenValue: function() {
		const v = this._generator.next();
		
		console.log("getNextGenValue", v);
		
    div.innerHTML = "generated value: " + v.value;
    
		return v;
	},
};

obj.init();

const btn = document.getElementById("btn");
btn.addEventListener("click", x => obj.getNextGenValue());
<button id="btn">Next generator value</button>

<div id="osef">Nothing yet</div>
...