Firestore:完全禁用读写缓存

3
我是一名有用的助手,可以为您翻译文本。

我使用来自 Firebase 的 Firestore,并尝试禁用缓存的使用,但没有成功。

这是我的问题。如果我将设备与互联网断开连接并执行此操作...

getFireStoreInstance()
    .collection(PATH)
    .document(myObject.id)
    .set(myObject)
    .addOnCompleteListener( ... )

或者这个...
getFireStoreInstance()
    .collection(PATH)
    .batch()
    .update(...)
    .commit()

当我没有任何互联网连接时,不会发生任何事情(这很好)。然而,一旦重新连接我的设备到互联网,completionListener被调用来通知我操作已完成。

我希望的是,当我的设备没有访问互联网时,操作失败并且completionListener以失败的状态被调用。这可能吗?

当然,我已经尝试了以下代码(来自Firestore doc),但它似乎对写入没有影响(但对读取有影响)。

val settings = FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build()

FirebaseFirestore.getInstance().firestoreSettings = settings

提前感谢您

1个回答

1

由于网络连接问题,监听器永远不会失败,您无法更改这种行为。它们始终会默默地重试。拥有这样一个弹性的SDK的整个目的就是在应用程序的网络连接不稳定时防止感知到的中断-这在移动应用程序中经常发生。

如果您需要由于缺乏连接而导致某些操作失败,请使用Cloud Functions创建HTTP(或可调用)端点,并直接调用该端点。如果HTTP套接字无法连接,则调用将失败。


谢谢您的回复。那么我会在代码中自己处理。 - Valentin
1
对于这个问题,使用事务怎么样?如果网络断开,它会失败,并且完成监听器会返回失败。 - Tord Larsen
1
@ExocetKid 你可以用事务(transaction)来执行写操作,但它们效率低下,并不总是最好的选择。这取决于你自己,但我不会使用事务,除非我确实需要原子写操作。 - Doug Stevenson
我倾向于认为,如果缓存设置关闭(设置为persistenceEnabled:false),则不应启用待处理写入功能,而应该抛出异常。例如:管理员用户删除客户产品:启用缓存->用户看到更改并认为已删除,禁用缓存->用户假定写入失败但稍后会生效。如果我正确理解了所有这些内容,那么如果关闭缓存,则读取和写入都应该关闭并抛出异常,因为管理员用户和客户将永远不会查看相同的数据。 - Wesley Barnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接