【问题标题】: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
  • 对。我仓促判断离线持久性。
  • 你的代码注释说它从来没有命中,你怎么知道它从来没有命中?你记录一些东西吗?还是有断点?
  • 是的,我在错误和非错误情况下都有日志和断点,没有任何打印或命中

标签: swift firebase google-cloud-firestore


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多