我正在使用Firebase数据库,并希望离线持久性也能正常工作。我已经看到,在脱机模式下调用DatabaseReference.updateChildren时,会立即触发值侦听器回调,而OnCompletionListener仅在网络恢复时才触发。那是正确的理解吗?如果是这样,那么在OnCompletionListener中成功或失败时,客户端应该做什么?

具体来说-


如果OnCompletionListener失败,更改是否会在本地回滚,并且使用回滚的值触发所有value-listener回调?
在什么情况下OnCompletionListener会返回失败?是否有需要重审的案件?
侦听OnCompletionListener的成功而不是ValueChangeListener中的回调的典型用例是什么?

最佳答案

那是正确的理解吗?


是的。

当网络连接丢失(用户设备上没有网络连接)时,不会触发onComplete()onFailure()。这种行为是有道理的,因为仅当在Firebase服务器上已提交(或拒绝)数据后才认为任务已完成。


没有回滚,因为更新数据时,首先将其写入数据库的本地版本,显然是使用以下代码行启用了持久性:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

当Firebase服务器由于由Firebase安全规则引起的insufficient permissions拒绝更新时。
这是典型的用例,用于监听OnCompletionListener的成功。

08-04 04:41