Ошибка типа: не удается прочитать свойство ‘_fieldsProto’ неопределенного

#firebase #google-cloud-firestore

#firebase #google-cloud-firestore

Вопрос:

Я использую Firestore и получаю эту ошибку всякий раз, когда пытаюсь вызвать data метод для документа из моментального снимка запроса. Вот мой код.

   let snapshot: FirebaseFirestore.QuerySnapshot<FirebaseFirestore.DocumentData>;
  try {
    snapshot = await admin.firestore()
      .collection("products")
      .where("email", "==", email)
      .get();
  } catch (error) {
    // error code
  }

  if (snapshot.empty) {
    // does not exist
    return;
  }

  const docs: DbSubscription[] = [];

  snapshot.forEach(({ data, id }) => {
    // this is where error is thrown
    docs.push({ ...data(), id } as DbSubscription);
  });
 

Я подтвердил, что документ существует и содержит данные, потому что запись snapshot?.docs[0]?.data() в консоль выводит то, что ожидается. Однако вызов data метода, описанного выше, выдает ошибку.

Кто-нибудь знает, почему это может происходить? Очень признателен!

Ответ №1:

Таким образом, похоже, что функция data создает внутреннюю ссылку на this объект для доступа к _fieldsProto объекту. Когда data функция извлекается из моментального снимка документа путем деструктурирования, this она больше не указывает на моментальный снимок документа, а на глобальный объект. Таким образом _fieldsProto , объект не может быть найден и выдается ошибка.

Эту проблему можно исправить в вашем коде, вызвав функцию data непосредственно из моментального снимка документа:

   snapshot.forEach((doc) => {
    const [id, data] = [doc.id, doc.data()];
    docs.push({ ...data, id } as DbSubscription);
  });