Генератор 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>

Другие вопросы по тегам