#javascript #firebase #google-cloud-firestore
# #javascript #firebase #google-облако-firestore
Вопрос:
Я пытаюсь получить данные из своей базы данных Firestore, но мне не удается сделать это правильно.
Моя проблема в том, что console.log(allData.length) всегда выводит 0, потому что я предполагаю, что он обгоняет асинхронную часть кода, но я не могу понять, как сделать «userDataSnapshot.docs.map» каким-то образом асинхронным. Любые советы о том, как я могу сделать это правильно?
const allData = [];
const userDataSnapshot = await db.collection("userdata").get();
userDataSnapshot.docs.map(async (doc) => {
var userObject = [];
userObject.push(doc.id);
var snapshot = await doc.ref.collection("advanceddata").get();
snapshot.docs.map((doc) => {
userObject.push(doc.data());
});
allData.push(userObject);
});
console.log(allData.length);
Ответ №1:
Я считаю, что это поможет:
const allData = [];
const userDataSnapshot = await db.collection("userdata").get();
for(const doc of userDataSnapshot.docs) {
var userObject = [];
userObject.push(doc.id);
var snapshot = await doc.ref.collection("advanceddata").get();
snapshot.docs.map((doc) => {
userObject.push(doc.data());
});
allData.push(userObject);
}
console.log(allData.length);
Комментарии:
1. Вау, спасибо! Я не знал, что эти циклы for работают так хорошо. Для обработки набора данных среднего размера требуется довольно много времени, но это работает! Спасибо!