как использовать цикл 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), если вы работаете с числами.

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