Почему оператор спреда пропускает данные?

Я работаю с Github API, используя библиотеку Octokit.

У меня есть функция, которая отображает весь репозиторий пользователя (имя пользователя). Я вызвал эту функцию нажатием кнопки под названиемFetch

Для простоты я визуализирую только 1-й репозиторий (с индексом 0).

const list = []

  function fetchRepos() {
    octokit.repos
      .listForUser({
        username: 'abhinav-anshul',
      })
      .then((details) => list.push(details.data[0].name))

    console.log('List Array', list)

    const list2 = [...list]
    console.log(list2)
  }

Как видно из кода, я обрабатываю цепочку обещаний, и в этой цепочке обещаний я помещаю результат репо в пустой массив с именем list.

в console.log('List Array', list), Я могу правильно получить имя 0-го репо, как показано на изображении ниже:

Но когда я пытаюсь использовать spread operator передать массив списка в новый массив с именем list2 и сделать console.log(list2) Получаю следующее:

Почему я потерял здесь название репо? Я делаю что-то концептуально неправильно? Любая помощь очень ценится.

Спасибо

1 ответ

Твой then() асинхронный, поэтому он запускается после вашего console.log(list2). Вот почему вашlist2 по-прежнему пустой массив.

Предлагаю сделать вашу функцию async:

const list = [];

async function fetchRepos() {
    const details = await octokit.repos
        .listForUser({
            username: 'abhinav-anshul',
        });

    list.push(details.data[0].name);

    console.log('List Array', list);
}
Другие вопросы по тегам