Данные загружаются из Firestore асинхронно, и пока это происходит, ваш основной код продолжает выполняться.
Проще всего понять, что это значит, поместив несколько операторов регистрации:
console.log("Starting to load data");
firestore.collection("magic: the gathering")
.get()
.then(function(query) {
console.log("Got data");
});
console.log("After starting to load data");
Когда вы запускаете этот код, он печатает:
Начало загрузки данных
После начала загрузки данных
Получил данные
Вероятно, это не тот порядок, в котором вы ожидали ведения журнала. Но на самом деле он работает так, как задумано, и объясняет вывод, который вы видите. К моменту последнего запуска console.log(A);
данные еще не были загружены, поэтому A
пусто.
Решение простое, но обычно требуется некоторое время, чтобы привыкнуть к: весь код, которому нужны данные из базы данных, должен быть внутри обратного вызова или вызываться оттуда.
Так что-то вроде этого:
var A = {};
A["name"] = "nissa";
firestore.collection("magic: the gathering")
.get()
.then(function(query) {
query.forEach(function(document) {
A[document.id] = document.id;
});
console.log(A);
})
Также см .: