【发布时间】:2018-12-29 04:24:50
【问题描述】:
我在 react-native-firebase 应用程序中使用 react-native-firebase 包,并试图了解事务如何离线工作。我正在尝试使用以下代码编写事务
firebase.database().ref('locations').transaction(locations => {
... my location modification logic,
return locations
})
但是,如果我在编写事务之前离线并且之前没有访问过引用,因此没有缓存数据,locations 为空。
Firebase 的官方文档中有这个小花絮
注意:因为你的更新函数被多次调用,它必须 能够处理空数据。即使您的数据中存在现有数据 远程数据库,事务时可能没有本地缓存 函数运行,导致初始值为 null。
这让我相信我应该将整个事务逻辑包装在里面
if (locations) {
... my location modification logic
}
但我仍然没有完全理解这一点。以下假设是否正确?
- 提交交易
- 如果存在离线和缓存数据,则对缓存数据应用事务,然后在连接恢复时应用于远程当前数据
- 如果离线且不存在缓存数据,则不要应用事务。连接恢复后,将事务应用于远程中的当前数据
- 如果在线,立即申请交易
如果这些假设是正确的,那么用户将不会立即看到他们在案例 #3 中的更改,但在案例 #2 中它将“乐观地”更新他们的缓存数据,并且用户会觉得他们的操作立即发生了。这就是离线交易的运作方式吗?我错过了什么?
【问题讨论】:
-
IIRC,如果您处于离线状态,事务会立即失败,因为它们需要针对服务器验证数据才能成功。它不会“等待并重新申请”。
标签: firebase firebase-realtime-database react-native-firebase