Почему doc.data() не является функцией в этом операторе if?

Когда я удаляю if-stament, я получаю данные, и doc.data() работает, но мне нужно проверить тип «добавлено», чтобы я не выводил существующие данные снова и снова.

С оператором if я получаю это сообщение об ошибке:

Uncaught TypeError: doc.data is not a function

 async getChats(callback){
    const roomFilter = query(colRef, where("room", "= = ", this.room));
    const ordered = query(roomFilter, orderBy('created_at'));
    this.unsub = onSnapshot(ordered, (snapshot) => {
      let items = []
      snapshot.docChanges().forEach(doc => {
        if (doc.type === 'added'){
          items.push({ ...doc.data(), id: doc.id })
          console.info(items);
          callback(items);
      }})    
    });
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
snapshot.docChanges().forEach(doc => {

Переменная, которую вы назвали doc, — это больше, чем просто документ. Он содержит дополнительную информацию об изменении. С выбранным вами именем переменной вам нужно сделать:

items.push({ ...doc.doc.data(), id: doc.doc.id })

Я бы подумал о том, чтобы переименовать его, может быть, чтобы "изменить"

snapshot.docChanges().forEach(change => {
  if (change.type === 'added') {
    items.push({ ...change.doc.data(), id: change.doc.id })
    console.info(items);
    callback(items);
  }
})

Другие вопросы по теме