cacheEntryRemoved 承诺何时实现?

问题描述 投票:0回答:1

文档是这样说的:

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

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

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

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

当不再需要从 WS 服务器接收到的部分消息时,在 onCacheEntryAdded 中实现

cacheEntryRemoved
承诺后立即部分取消订阅现有 WebSockets 连接是一种好的做法吗?或者从 WS 连接的该通道取消订阅 useEffect 钩子的清理函数是否更好?

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

caching rtk-query
1个回答
3
投票

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

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

因此,当第一个组件执行

useChatRoomQuery("flower")
时,会添加一个缓存条目(并且使用参数
onCacheEntryAdded
"chatroom"
条目运行
"flower"
函数)。如果另一个组件也使用
useChatRoomQuery("flower")
,则使用相同的缓存条目(不调用
onCacheEntryAdded
)。
如果组件调用
useChatRoomQuery("afterhour")
,则会创建一个新的缓存条目(并启动另一个
onCacheEntryAdded
)。

一旦使用缓存条目的最后一个组件停止使用它(通过卸载或更改为另一个参数),就会启动计时器(通常为 60 秒 - 您可以通过

keepUnusedDataFor
在 api 和端点级别进行配置)。
在那之后,缓存条目将被删除,并且该承诺得以解决。

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

© www.soinside.com 2019 - 2024. All rights reserved.