用户离线时如何在Firestore中执行交易?

时间:2019-01-15 10:32:17

标签: google-cloud-firestore react-native-firebase

我正在创建一个多页应用程序,即使用户处于脱机状态,我也需要创建和存储事务。如何使用Firestore实现此目的?另外,我还需要一些有关如何持久保存从Firestore本地接收的数据的想法。

2 个答案:

答案 0 :(得分:1)

离线状态下无法运行事务,但是如果您认为离线状态下数据没有更改,则可以使用dbRef.addSnapshotListener(MetadataChanges.INCLUDE)dbRef.update()从缓存中获取数据并在那里进行更新。

答案 1 :(得分:0)

  

用户离线时如何在Firestore中执行交易?

你不能!交易不支持脱机使用,无法缓存或保存以供以后使用。这是因为事务绝对需要与服务器进行往返通信,以确保事务内的代码成功完成。因此,您只能在在线时使用交易,因为交易取决于网络。

  

我还需要一些关于如何持久保存从Firestore接收到的数据的想法。

根据Cloud Firestore关于offline persistence的官方文档:

  
      
  • 对于Android和iOS,默认情况下启用离线持久性。要禁用持久性,请将PersistenceEnabled选项设置为false。

  •   
  • 对于Web,默认情况下禁用脱机持久性。要启用持久性,请调用enablePersistence方法。会话之间不会自动清除Cloud Firestore的缓存。因此,如果您的Web应用程序处理了敏感信息,请确保在启用持久性之前先询问用户是否在受信任的设备上。

  •   
     

重要:对于Web,脱机持久性是一项实验性功能,仅Chrome,Safari和Firefox Web浏览器支持。另外,如果用户打开多个指向同一Cloud Firestore数据库的浏览器选项卡,并且启用了离线持久性,则Cloud Firestore仅在第一个选项卡中可以正常工作。

编辑:

Android版Firestore SDK的local cache已默认启用。因此,如果服务器上没有更新,则所有读取操作都将来自缓存。因此,Firestore提供了此功能来处理脱机数据。这意味着,如果用户在脱机时尝试添加/删除文档,则每个操作都会添加到队列中。一旦用户重新建立连接,脱机时所做的每个更改都将在Firebase服务器上更新。换句话说,所有查询都将在服务器上提交。

还请注意,当您脱机时,尚未同步到服务器的挂起写入将保留在队列中。如果您没有在线同步就执行太多写操作,则该队列将快速增长,并且不仅会减慢写操作的速度,还会减慢您的读操作的速度。因此,我建议将此数据库用于在线功能。