【发布时间】:2018-10-24 08:56:26
【问题描述】:
我有一个寿命不长的可观察对象(http 请求)。
我正在使用publishReplay(1) 和refCount(),这样当尝试同时访问它时,它会返回相同的值而不会再次触发 http 调用。
但如果所有订阅都取消订阅,我需要进行一些清理。
我不能使用finalize,因为:
- 如果我在
publishReplay之前使用它,那么一旦 http 请求完成,它就会关闭 - 如果我在
refCount之后使用它,它将在一个可观察到的取消订阅后立即运行(而不是在全部取消订阅时)
所以基本上我想要的是将回调传递给refCount 并在订阅数量达到0 时调用该回调。但它不是那样工作的。当所有订阅者都退订时,有什么方法可以“警告”?
我现在能想到的最简单的方法是创建一个自定义运算符,它几乎可以扩展 refCount 以添加回调。
有更好的想法吗?我很确定有更好的方法来做到这一点。
谢谢!
【问题讨论】:
-
为什么不把它放在
publishReplay和refCount之间呢?如果ConnectableObservable实现lift,finalize将返回ConnectableObservable- 允许使用refCount。这无法使用 TypeScript 表示,但lift就是这样做的。 -
哦,真的很酷,我以为我这样做有误,但事实证明我没有!感谢@cartant 的解释,如果你有 100 万人重写它作为答案:)
标签: rxjs observable reactive-programming