为啥 Firestore 有时不返回任何内容,没有错误,啥也没有?
Posted
技术标签:
【中文标题】为啥 Firestore 有时不返回任何内容,没有错误,啥也没有?【英文标题】:Why does Firestore sometimes not return anything, no error, nothing?为什么 Firestore 有时不返回任何内容,没有错误,什么也没有? 【发布时间】:2019-05-11 13:20:13 【问题描述】:我正在做一个简单的查询,并且 Firestore 定期不返回任何内容。没有错误,没有结果,什么都没有。
Firestore.firestore().collection("groupChats")
.order(by: kUpdatedAt, descending: true)
.whereField("memberIds", arrayContains: currentUserId)
.limit(to: 15).getDocuments [weak self] snapshot, error in
// nothing inside here ever hits
我不确定如何继续或调试它,因为它似乎在 Firestore 内部。用户有互联网连接。拉动刷新并再次调用该查询会返回相同的无操作结果。
有什么想法吗?谢谢!
【问题讨论】:
Firestore 具有离线数据功能,这可能会导致您的问题。对于 android 和 ios,默认启用离线持久性。您是否使用snapshot.metadata.isFromCache
检查过数据的来源?
这些功能是如何导致这个问题的?不完全确定这两件事有什么关系?正如我在帖子中所说,该块永远不会触发,所以我实际上无法查看snapshot.metadata.isFromCache
对。我仓促判断离线持久性。
你的代码注释说它从来没有命中,你怎么知道它从来没有命中?你记录一些东西吗?还是有断点?
是的,我在错误和非错误情况下都有日志和断点,没有任何打印或命中
【参考方案1】:
最终导致缓存的问题在默认情况下处于打开状态,并且我在设备上拥有大量来自开发和迁移的缓存。作为Firestore()
初始化的一部分,关闭离线缓存对此有很大帮助,并使我的应用再次可用。
【讨论】:
【参考方案2】:你应该使用以下代码
Firestore.firestore().collection("groupChats")
.order(by: kUpdatedAt, descending: true)
.whereField("memberIds", arrayContains: currentUserId)
.limit(to: 15).getDocuments (snapshot, error) in
if error != nil
print("Error getting documents: \(error)")
else
for document in (snapshot?.documents)!
print("\(document.documentID) => \(document.data())")
【讨论】:
谢谢法伊兹。上面有很多 cmets,但我之前提到过,完成块根本没有被击中。它根本没有返回错误或任何数据。问题是我的设备上有一个大缓存。我回答了我自己的问题,这实际上是我的问题的解决方案。谢谢【参考方案3】:我遇到了同样的问题,对我来说,查询字段是以保留字命名的。 val type:String=""
我将保留更改为非保留,查询就像魔术一样工作。
我的代码是这样的
val query=FirebaseFirestore.getInstance()
.collection("Organizations")
.orderBy("name")
.whereEqualTo("type",orgType)
所以我把它改成了更有意义的东西,如下所示。
val query=FirebaseFirestore.getInstance()
.collection("Organizations")
.orderBy("name")
.whereEqualTo("organizationtype",orgType)
【讨论】:
以上是关于为啥 Firestore 有时不返回任何内容,没有错误,啥也没有?的主要内容,如果未能解决你的问题,请参考以下文章
.Net UdpClient Receive - 关于为啥它不返回任何内容的技术问题