为啥 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 具有离线数据功能,这可能会导致您的问题。对于 androidios,默认启用离线持久性。您是否使用 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 - 关于为啥它不返回任何内容的技术问题

HttpWebRequest GetResponse() 不返回任何内容

为啥 getLastRequest 不返回任何内容?

main 函数不返回任何内容。为啥? [复制]

为啥我的 Perl 映射不返回任何内容?