Получите одну запись/Документ из Firebase Firestore, используя Асинхронное ожидание

# #javascript #firebase #google-cloud-firestore #async-await

Вопрос:

Я пытаюсь прочитать документ из firestore, используя идентификатор документов, и я не хочу использовать синтаксис .then() в документации firebase. Я хочу подать в суд на Async await, но получаю сообщение об ошибке «Не удается прочитать данные свойства неопределенного». Ниже приведен мой код

 export const getOneJobById = async jobId => {
  try {
    const snapShot = await db.collection('jobs').doc(jobId).get();
    return snapShot.doc.data();
  } catch (error) {
    console.log(error.message);
  }
}; 

Помоги мне понять, в чем я ошибаюсь

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

1. Привет, Дижифлекс, ты смог попробовать мой ответ? Если это было полезно и работает по назначению, вы можете принять (✔) и проголосовать (🔼) за это 🙂

2. Здравствуйте, @Dharmaraj Я увидел ваш ответ сразу после того, как вы его опубликовали, и он сработал. Затем я нажал «Принять», но StackOverflow уведомил меня, что я могу принять ответ только через 11 минут, и я забыл вернуться и принять его позже. Спасибо за напоминание.

Ответ №1:

На снимке DocumentSnapshot нет никаких свойств doc . Вам нужно использовать .data() на snapShot себе.

 export const getOneJobById = async jobId => {
  try {
    const snapShot = await db.collection('jobs').doc(jobId).get();
    return snapShot.data();
  } catch (error) {
    console.log(error.message);
  }
};
 

Если вы извлекаете несколько документов, т. е. используете get() метод в CollectionReference, который возвращает снимок запроса, вы получаете доступ .docs к свойству моментального снимка запроса и используете data() метод для каждого из них по отдельности, как показано ниже:

 const querySnapshot= await db.collection('jobs').get();
console.log(querySnapshot.docs.map(d => d.data()))