cacheEntryRemoved 承诺何时兑现?

When is the cacheEntryRemoved promise fulfilled?

文档是这样说的:

cacheEntryRemoved - A Promise that allows you to wait for the point in time when the cache entry has been removed from the cache, by not being used/subscribed to any more in the application for too long or by dispatching api.utils.resetApiState.

我已经目视浏览了文档,但我对这部分的理解还不够深入。

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

当组件接收流式更新时怎么办?

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

我有一个 Socket.IO 连接,用于并行接收更多消息通道,一些组件需要一个通道,一些其他组件需要另一个,一些其他组件需要与现有安装相同的通道零件。兑现承诺后是否可以退订频道?我在 .

中提供了更多相关信息

字面意思:当缓存条目从缓存中删除时。

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

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

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

因此,一般来说,取消订阅您的套接字连接可能是个好主意 - 如果这是您收听的最后一个主题,也请断开连接。毕竟,一段时间以来没有人对这些数据感兴趣,您以后可以随时重新连接并添加新的侦听器。