离线查询数据的实现和功能-实时数据库

时间:2019-05-20 21:03:47

标签: ios swift firebase

我目前正在将数据写入实时数据库,如下所示:

function writeData {
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let databaseRef = Database.database().reference().child("users/\(uid)")

        let object = [
            ...
            ] as [String: Any]

        databaseRef.setValue(object)
}

它工作正常,但我目前正在尝试减少数据丢失导致该应用终止的可能性。为此,我最近浏览了Web,发现了以下代码:

let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.queryOrderedByValue().queryLimited(toLast: 4).observe(.childAdded) { snapshot in

}

我是正确的吗?假设上面的示例保存了最后4次数据写入尝试,直到再次建立连接为止-一旦连接成功,它们将被上传吗?

如果这是符合我的需求的功能-如何实现?如何将其与我的writeData()函数连接?上例中的“分数”指的是什么?

1 个答案:

答案 0 :(得分:1)

如果Firebase客户端未连接到其服务器,则该应用程序的任何写操作将始终由Firebase客户端排队。恢复连接后,Firebase客户端会将排队的写入发送到服务器。

当您enable disk persistence时,Firebase客户端会将排队的写操作写入磁盘上的文件。 Firebase客户端还将最近读取操作的所有结果写入该文件。这样,它们还将在任何应用程序关闭后都可以幸存,并且在用户(重新)启动应用程序并建立连接时可用/重试。

您显示的代码与排队写操作没有任何关系。这个:

scoresRef.queryOrderedByValue().queryLimited(toLast: 4).observe(.childAdded) { snapshot in

将听众/观察者附加到scoresRef以获得最高的4分。如果客户端连接到服务器,这将是最新/最高分数。如果客户端未连接到服务器,但是磁盘上有scoresRef的数据,则它将是客户端上次看到的最新/最高分数。