【发布时间】:2018-11-04 13:58:59
【问题描述】:
我正在尝试返回一个在回调中异步创建的Observable:
const mkAsync = (observer, delay) =>
setTimeout(() => Observable.of('some result').subscribe(observer), delay)
const create = arg => {
const ret = new Subject()
mkAsync(ret, arg)
return ret
}
因此,我使用Subject 作为单播代理,它在回调中订阅了底层Observable。
这个解决方案的问题是,当我取消订阅Subject 的订阅时,取消订阅不会转发到底层Observable。看起来我需要某种类型的引用计数来使 Subject 在没有更多订阅者时取消订阅,但是在这种命令式回调样式中使用它时我无法弄清楚。
我必须将mkAsync 保留为空,并且正在寻找替代实现。
这是正确的做法吗?有没有使用Subject 的替代解决方案?
如何确保在取消订阅主题时取消创建的Observable(在Subscription 上调用unsubscribe)?
【问题讨论】:
标签: rxjs observable subscription subject-observer