有一段代码可以将一些数据提取到缓存中,并使用 websocket 连接使其保持同步,并使用 Observable 提供对数据的访问接口,我怎么知道在某一点上没有所述数据的订阅者及时?
我想unsubscribe()
挂上 observable 的调用(并检查订阅者计数是否为 0),但我不确定如何实现。
现实生活中的场景是一个 graphql 查询(apollo-angular)和一个 websocket 订阅以保持数据同步。一旦没有数据的订阅者(例如用户导航到另一个页面),可以关闭websocket连接以节省服务器资源,但需要同时从缓存中删除数据,否则可能会消失不同步,因为不再从服务器接收到推送事件,以防用户再次导航回来。我不愿意将数据保存在过时的缓存中。
那么......我如何才能挂钩可观察对象被销毁/所有订阅者都取消订阅以从缓存中删除数据的事件?该服务设置了一个graphql查询并设置了订阅以侦听更改,返回Observable,但我不确定如何将其删除,因为该实例已在用户代码上传递。
我不是在寻找仅网络、绕过缓存和类似的 apollo 客户端设置,我正在寻找一种实际使用的方法,但要保持 apollo 缓存中的数据干净和最新,作为服务器提供了一种方法来做到这一点。