我有一个查询,在模拟器之外总是返回一个文档引用属性undefined
。
更新:从浏览器运行时出现问题。
当然,我在Firebase控制台中检查了该文档,该记录在属性vendor
中包含值引用。
当执行查询时,我从模拟器/测试和浏览器中获得了不同的行为。在模拟器和测试中,它正在工作。
我有这个转换器:
private converter: FirestoreDataConverter<StockItem> = {
toFirestore: (stockItem) => {
const data = {...stockItem};
data.vendor = this.vendorDAO.docRef(stockItem.vendor);
return data;
},
fromFirestore: async (snapshot, options) => {
const data = snapshot.data();
console.log(data); // This contains the vendor property always as undefined.
data.vendor = await this.vendorDAO.retrieve(data.vendor.id)
return StockItem.fromJSONWithId({...data}, snapshot.id)
}
}
我用它来做一个查询:
const stockSnapshot = await getDocs(stockQuery);
const retrievingData = stockSnapshot.docs.map((doc) => doc.data());
如果在模拟器中执行它,一切都很好,但是在真实的的集合中运行,在fromFirestore
函数中返回的snapshot.data()
对象总是将vendor
引用对象作为undefined
。
{
price: 13
quantity: 3
vendor: undefined
}
版本:"firebase": "^9.19.1"
1条答案
按热度按时间rxztt3cl1#
我不会删除这个问题,因为即使错误与Firestore无关,它也与async有关。
主要问题是集合名称中的一个错字,但代码在更新
data
对象后打印数据,所以看起来像是Firestore想要返回undefined
我的意思是,在这段代码中:
不知道为什么,但
console.log
在data.vendor
分配给undefined
后打印数据内容,因为vendorDAO
中的配置错误。为什么这种行为在浏览器中发生,而不是在单元测试中发生?