Получение данных из Firestore в асинхронном режиме

#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 работают так хорошо. Для обработки набора данных среднего размера требуется довольно много времени, но это работает! Спасибо!