yaNastia
@yaNastia

Почему генератор не отдает следующие значение?

На каждый вызов функции "loop", я пытаюсь возвращать новое значение свойства "с" с объекта "test" но почему то на каждый вызов получаю одно и то же значение
1 вызов: { value: { a: 1 }, done: false } 
2 вызов: { value: { a: 1 }, done: false } 
3 вызов: { value: { a: 1 }, done: false }

вместо того чтобы на каждый вызов получать новое значение
1 вызов: { value: { a: 1 }, done: false } 
2 вызов: { value: { a: 2 }, done: false }  
3 вызов: { value: { a: 3 }, done: false }


Помогите пожалуйста

const test = {
    a: { id: 1 },
    b: { id: 2 },
    c: [{ a: 1 }, { a: 2 }, { c: 3 }]
}

function* generLoop(elem) {
    // eslint-disable-next-line no-undef,no-restricted-syntax
    for (el of test[elem]) {
        // eslint-disable-next-line no-undef
        yield el
    }
}

function loop(elem) {
    const findQuery = Object.keys(test).find(el => el === elem)
    if (findQuery) {
        return generLoop("c").next()  // здесь если свойство "с" пытаюсь вызывать новое значение при каждом вызове функции
    }
    return test[elem]
}

for (let i = 0; i < 3; i++) {
    console.log(loop("c"))
}
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
yaNastia
@yaNastia Автор вопроса
Решил вопрос таким образом

const test = {
  a: { id: 1 },
  b: { id: 2 },
  c: [{ a: 1 }, { a: 2 }, { c: 3 }]
};

function* generLoop(elem) {
  // eslint-disable-next-line no-undef,no-restricted-syntax
  for (el of test[elem]) {
    // eslint-disable-next-line no-undef
    yield el;
  }
}

function createLoop(elem) {
  let gen;
  if (elem === 'c') {
    gen = generLoop(elem);
  }
  return () => (gen ? gen.next() : test[elem]);
}

const iterator = createLoop('c');
for (let i = 0; i < 3; i++) {
  console.log(iterator());
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы