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