Генератор JavaScript в модуле / пакете
У меня возникли проблемы с генераторами, и, надеюсь, вы мне поможете.
Итак, в основном я разделил / написал свои функции в отдельных модулях (пакетах), чтобы было проще обновить мое приложение.
На изображении ниже вы можете иметь представление о том, что я пытаюсь сделать. По какой-то причине, когда я продолжаю вызывать функцию с .next()
запускается только первый выход.
Код, который не работает правильно
Как я могу запустить другие урожаи?
1 ответ
В вашем коде 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>