Firestore: Unable to read document data (Uncaught TypeError: docSnap.exists is not a function at HTMLFormElement)

Viewed 2269

I am a new developer with no experience in Web apps. I have a collection called "users" in Firestore in which the document IDs are the user's emails. I am trying to read the data in one of the documents following the example provided by Firebase here

I get two errors:

  • First one is the use of "await": Uncaught SyntaxError: Unexpected reserved word.
  • Second is this message: Uncaught TypeError: docSnap.exists is not a function at HTMLFormElement.

I bypassed the first one by ommiting "await", but cannot avoid the second. Have you got any idea of what is wrong with my code?

console.log(docSnap) gives the following message: "Promise {pending}"

Thanks.

requestForm.addEventListener('submit', (event) => {
event.preventDefault();

const user = auth.currentUser;
const docSnap = await getDoc(doc(db, "users", user.email));

    if (docSnap.exists()) {
        console.log("Document data:", docSnap.data());
        } else {
        console.log("No such document!");
    }
})

3 Answers

Looks like you return a Promise and it does not meet the requirements of async/await. Try this way.

getDoc(doc(db, "users", user.email)).then(docSnap => {
  if (docSnap.exists()) {
    console.log("Document data:", docSnap.data());
  } else {
    console.log("No such document!");
  }
})

Be careful, getDoc vs getDocs

For single document

import { doc, getDoc } from "firebase/firestore";

const docRef = doc(db, "cities", "SF");
const docSnap = await getDoc(docRef);

if (docSnap.exists()) {
  console.log("Document data:", docSnap.data());
} else {
  // doc.data() will be undefined in this case
  console.log("No such document!");
}

For all document

import { collection, getDocs } from "firebase/firestore";

const querySnapshot = await getDocs(collection(db, "cities"));
querySnapshot.forEach((doc) => {
  // doc.data() is never undefined for query doc snapshots
  console.log(doc.id, " => ", doc.data());
});

Not work, the same code works some times and others it does not. I am guessing it has to do with initializeApp that can't be run twice. It's frustrating. It carries from back in the day, you might have to check if it already initialized

Related