javascript Firestore中的引用属性始终未定义

1aaf6o9v  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(128)

我有一个查询,在模拟器之外总是返回一个文档引用属性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"

rxztt3cl

rxztt3cl1#

我不会删除这个问题,因为即使错误与Firestore无关,它也与async有关。
主要问题是集合名称中的一个错字,但代码在更新data对象后打印数据,所以看起来像是Firestore想要返回undefined
我的意思是,在这段代码中:

console.log(data); // This contains the vendor property always as undefined.
      data.vendor = await this.vendorDAO.retrieve(data.vendor.id)

不知道为什么,但console.logdata.vendor分配给undefined后打印数据内容,因为vendorDAO中的配置错误。

为什么这种行为在浏览器中发生,而不是在单元测试中发生?

相关问题