Почему firestore не показывает информацию о вошедшем пользователе?

#javascript #firebase #google-cloud-firestore

#javascript #firebase #google-облако-firestore

Вопрос:

Справочная информация: Вход в систему работает отлично, данные организованы следующим образом [![это][1]][1] [1]: https://i.stack.imgur.com/f9Cjq.png Каждый раз, когда я захожу в одну из 2 созданных мной учетных записей и перехожу на страницу настроек, она показывает только информацию об одном конкретном пользователе. Наконец, в .collection(«userInfo») я добавил .doc(user.uid), и в нем говорилось, что функция forEach была недействительной. Вот код. Кто-нибудь может сказать мне, что я делаю не так?

     var auth = firebase.auth().currentUser;
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
    db = firebase.firestore()
    db
        .collection("userInfo")
        .get()
        .then(function (querySnapshot) {
            querySnapshot.forEach(function (doc) {
                // console.log(user.uid, " => ", doc.data());
                console.log(user.uid)
                var email = doc.data().email;
                var bio = doc.data().bio;
                var downloadURL = doc.data().downloadURL;
                document.getElementById("email").placeholder = email;
                document.getElementById("bio").placeholder = bio;
                myimg.src = downloadURL;
              }
         })
  

Комментарии:

1. При поиске по определенному документу результат не является массивом

2. firebase.google.com/docs/firestore/query-data/get-data

3. Я почти уверен, что он не выдает массив. Но я почти уверен, что он просто выбирает одного из пользователей из списка идентификаторов документа.

4. Но почему тогда вы ожидаете, что функция forEach будет в результате как метод?

Ответ №1:

  var auth = firebase.auth().currentUser;
 firebase.auth().onAuthStateChanged(function (user) {
   if (user) {
     db = firebase.firestore();
     db.collection("userInfo").doc(user.uid).get()
     .then(function (doc) {
       if(doc.exists) {
         var email = doc.data().email;
         var bio = doc.data().bio;
         var downloadURL = doc.data().downloadURL; 
         document.getElementById("email").placeholder = email;
         document.getElementById("bio").placeholder = bio;
         myimg.src = downloadURL;
       }
     });
   }
 });
  

Комментарии:

1. Это имеет смысл, спасибо. Я немного повторил это и вижу, что я ошибался в использовании функции forEach, которая не позволяла мне использовать функцию .doc(), и я не использовал if (doc.exists). Почему вы это использовали? И большое спасибо!

2. Чтобы убедиться, что объект существует, иногда он не существует, потому что другой пользователь удаляет его