我有一个场景,我想从服务器获取一些数据,并且用户可以请求刷新这些数据。页面的其余部分需要更新以反映当前加载的数据迭代。
我想象一下,在这里,我有一个可以观察到的热点,可以发布它加载的数据。我不想将数据的所有旧迭代保留为1,我只关心数据的最新迭代,2.如果用户在给定的会话中进行足够的刷新,可能会导致内存不足的异常。
但是,我确实希望保留上一个已发布的值,这样如果我动态地打开一个需要访问相同数据的新组件,它就不会发出不必要的新请求。为此,我需要一个可观察的坐在热可观测的顶部,这将只保留和释放来自热可观测的最后的排放。这里有一个图表说明了这个想法:
dataStream X - - - - - Y - - - - |>
echoStream X - - - - - Y - - - - |>
subscription1 X - - - - - Y - - - - |>
subscription2 X - Y - - - - |>
subscription3 Y - - |>echoStream被订阅到dataStream。subscription1、subscription2和subscription3都订阅了echoStream,但它们在不同的点订阅。在订阅时,它们获得从dataStream发出的最后一个值,并从dataStream接收后续更新。
echoStream是一种可以观察到的“热”和“冷”的混合,具有有限的历史保留。
在上面的示例中,rxjs是否提供了一个标准操作符来设置类似echoStream的内容?
发布于 2016-03-16 19:14:25
就我所理解的而言,您可以在以下形式中使用shareReplay运算符:
echoStream = dataStream.shareReplay(1)
如文件所述:
返回一个可观察的序列,该序列共享基础序列的单个订阅并重放通知. 这个操作符是一个重放的专门化,它连接到可连接的可观察序列,当观察者的数量从0到1时,当没有更多的观察者时,它断开连接。
这里有两件事是由这个操作符做的。当订阅者订阅流时,它将立即接收流发出的最新值(或之前Xms时间窗口中发出的n个最新值或值--取决于调用操作符时传递的参数)。这就是重放功能。然后是自动取消订阅功能,当流不再有任何订阅者时,该功能就会启动。
如果您不关心自动取消订阅,您可以使用replay操作符代替,您将只获得重放功能。例如:
echoStream = dataStream.replay(1)
https://stackoverflow.com/questions/36044309
复制相似问题