как использовать цикл while в функции генератора
Я новичок в функции генератора и пытаюсь выполнить цикл while внутри него.
export function* findRandomData(list, name) {
let searchList = true;
const formattedName = name
.replace(new RegExp('_', 'g'), ' ')
.toLowerCase();
const indexesToSearch = [];
for (let i = 0; i < list.length; i++) {
indexesToSearch.push(i);
}
let viableId;
// Search through results
while (searchList) {
// If there are no results left then finish
if (indexesToSearch.length === 0) {
searchList = false;
throw new Error('Could not find id');
}
// Find a random number that has not been selected already, then remove
const randomPosition = Math.floor(Math.random() * indexesToSearch.length);
indexesToSearch.splice(randomPosition, 1);
let title = list[randomPosition].title;
viableId = list[randomPosition].id;
const eligible = yield call(
isEligibleVideo,
title,
formattedName,
viableId
);
if (eligible) {
searchList = false;
}
}
return viableId;
}
но он возвращается null
даже если цикл while не завершен для поиска.
const data = yield call(findRandomData, resp['res'], name);
ошибкаError: Could not find id at findRandomData
что я делаю не так
1 ответ
Попробуйте указать значение переменной viableId при ее объявлении, например: let viableId = ""; // если ваша переменная получит строковое значение
Или присвойте ему числовое значение (обычно люди используют 0), если вы работаете с числами.