РЕДАКТИРОВАТЬ: я отредактировал, чтобы включить более актуальный код, кажется, мой пример «уменьшенного размера» был немного запутанным.
У меня есть массив javascript, questions
неизвестной длины, который содержит объекты, один для каждого «вопроса», каждый из которых имеет форму
{
questionID: 1,
questionText:'bla bla bla',
end: false
}
У меня также есть функция getNextQuestion
, которая принимает id
и возвращает экран
const getNextQuestion = id => R.find(R.propEq(['questionID'], id))(questions);
(конечно, можно использовать Array.find
для вышеизложенного, но я изучаю Рамду)
Я хочу написать генератор, который выдаст определенный объект из этого массива, выбранный передается в id
, до тех пор, пока не будет получен объект, который имеет end === true
То есть, объект с этим конкретным id
должен иметь значение last , возвращаемое генератором. После этого генератор должен выдать {value: undefined, done: true
Я думал написать что-то вроде этого
export function* questionGenerator() {
let nextID = 1;
let continueLoop = true;
while (continueLoop) {
const question = getNextQuestion(nextID);
if (question.end) continueLoop = false;
nextID = yield getNextQuestion(nextID);
}
}
, которое будет называться вот так
const qGen = questionGenerator();
const id = 1;
do {
const result = gGen.next(i++)
console.log(result.value)
} while (!result.done)
но я не уверен, что это лучший способ написать это.
Есть ли лучший способ?