我正在使用Firebase数据库,并希望离线持久性也能正常工作。我已经看到,在脱机模式下调用DatabaseReference.updateChildren
时,会立即触发值侦听器回调,而OnCompletionListener
仅在网络恢复时才触发。那是正确的理解吗?如果是这样,那么在OnCompletionListener中成功或失败时,客户端应该做什么?
具体来说-
如果OnCompletionListener失败,更改是否会在本地回滚,并且使用回滚的值触发所有value-listener回调?
在什么情况下OnCompletionListener会返回失败?是否有需要重审的案件?
侦听OnCompletionListener的成功而不是ValueChangeListener中的回调的典型用例是什么?
最佳答案
那是正确的理解吗?
是的。
当网络连接丢失(用户设备上没有网络连接)时,不会触发onComplete()
和onFailure()
。这种行为是有道理的,因为仅当在Firebase服务器上已提交(或拒绝)数据后才认为任务已完成。
没有回滚,因为更新数据时,首先将其写入数据库的本地版本,显然是使用以下代码行启用了持久性:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
当Firebase服务器由于由Firebase安全规则引起的
insufficient permissions
拒绝更新时。这是典型的用例,用于监听OnCompletionListener的成功。