#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);
});