1

文档是这样说的:

cacheEntryRemoved- 一个 Promise,允许您等待缓存条目从缓存中删除的时间点,方法是在应用程序中不再使用/订阅太长时间或调度 api.utils.resetApiState。

我已经在视觉上扫描了文档,但我还没有像我想的那样理解这部分。

上面的引用是否意味着当使用查询的组件卸载时,承诺已经实现?

组件何时接收流式更新呢?

cacheEntryRemoved当不再需要从 WS 服务器接收的部分消息时,在 onCacheEntryAdded 中实现承诺后立即部分取消订阅现有的 WebSockets 连接是否是一种好习惯?还是从 WS 连接的该通道取消订阅 useEffect 挂钩的清理功能更好?

我有一个 Socket.IO 连接,用于并行接收更多通道的消息,一些组件需要一个通道,一些其他组件需要另一个,其他一些组件需要与现有已安装组件相同的通道。履行此承诺后是否可以退订频道?我在这个其他问题中提供了更多关于此的信息。

4

1 回答 1

2

这是非常字面的:当缓存条目从缓存中删除时。

对于每个端点参数组合,您都有一个缓存条目。

因此,当第一个组件执行 a 时useChatRoomQuery("flower"),会为其添加一个缓存条目(并为带有参数的条目onCacheEntryAdded运行一个函数)。如果另一个组件也使用,则使用相同的缓存条目(不调用)。 如果一个组件调用,那将创建一个新的缓存条目(并启动另一个)。"chatroom""flower"useChatRoomQuery("flower")onCacheEntryAdded
useChatRoomQuery("afterhour")onCacheEntryAdded

一旦使用缓存条目的最后一个组件停止使用它(通过卸载或更改为另一个参数),就会启动一个计时器(通常为 60 秒 - 您可以通过 api 和端点级别配置它keepUnusedDataFor)。
在那之后,缓存条目被删除,并且该承诺得到解决。

所以,一般来说,取消订阅你的套接字连接可能是一个好主意——当这是你正在监听的最后一个主题时,也断开它的连接。毕竟,一段时间以来没有人对这些数据感兴趣,您可以随时重新连接并稍后添加新的侦听器。

于 2021-08-08T19:54:00.320 回答