【问题标题】:When is the cacheEntryRemoved promise fulfilled?cacheEntryRemoved 承诺何时实现?
【发布时间】:2021-10-12 14:06:52
【问题描述】:

文档是这样说的:

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

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

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

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

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

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

【问题讨论】:

    标签: caching redux react-redux rtk-query rtk


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 1970-01-01
      • 2014-12-29
      • 2017-01-31
      • 2013-02-21
      • 1970-01-01
      • 2014-11-25
      • 2016-05-25
      • 2014-09-28
      相关资源
      最近更新 更多