При выводе в консоль массива он пустой, но нет (массив Шрёдингера)

При обращении к firebase получаю response и заношу данные во внешний массив который был задан до этого, и все данные заносятся, но в консоле показывается [ ], но при открытии там есть все данные. Также при ображении по ключу выдает underfined.

Мой код: введите сюда описание изображения

Консоль браузера:

введите сюда описание изображения введите сюда описание изображения

Работаю с React.js и firebase realtime database.

Вопрос: Что вообще происходит, как исправить это?


Ответы (1 шт):

Автор решения: Konstantin Modin

Запрос данных из БД это асинхронный код. console.log - это синхронный код. В момент выполнения console.log данные ещё не получены. А когда вы смотрит данные в консоли они уже там. Можно поставить console.log после цикла for, внутри коллбека.

Вот пример который иллюстрирует данное поведение:

const result = [];

setTimeout(() => {
  result.push("value");
}, 0);

console.log(result);
console.log(result[0]);


//-------------------------------------

const result2 = [];

setTimeout(() => {
  result2.push("value");
  console.log(result2);
  console.log(result2[0]);
}, 0);

→ Ссылка