【发布时间】:2018-04-26 05:40:47
【问题描述】:
当最后一个主题观察者取消订阅该主题时,AsyncSubject 变为可观察的。这里是the quote:
当它完成时,它就完成了。主题在使用后不能重复使用 已取消订阅、已完成或出错。
这里是演示:
const ofObservable = Rx.Observable.of(1, 2, 3);
const subject = new Rx.AsyncSubject();
ofObservable.subscribe(subject);
subject.subscribe((v) => {
console.log(v);
});
subject.unsubscribe((v) => {
console.log(v);
});
// here I'll get the error "object unsubscribed"
subject.subscribe((v) => {
console.log(v);
});
如何防止题目完成?
有一个share 运算符:
在 RxJS 5 中,操作符
share()产生了一个热的 refCounted observable 可以在失败时重试,或在成功时重复。因为 主题一旦出现错误、完成或其他情况就不能重复使用 取消订阅后,share()运营商将回收死去的主题到 启用重新订阅生成的 observable。
这就是我要找的。但是share 创建了一个主题,我需要AsyncSubject。
【问题讨论】:
-
This test 建议它应该按照您期望的方式运行,不是吗?会不会有其他事情发生?
-
嗯,谢谢,检查this plunker,没有别的了
-
对我来说,它看起来有点像错字。将
subject.subscribe调用的结果分配给一个变量(结果是订阅)并在订阅上调用unsubscribe- 而不是主题。随着这种变化,笨蛋似乎做了我所期望的。 -
@cartant,谢谢,将其作为答案发布。我也想知道当我取消订阅主题时发生了什么?它应该已经从
ofobservable 退订,因为后者已经完成,那么当我退订主题时会发生什么?另外,这是否意味着我引用的引用仅适用于普通主题? -
我真的不知道在这个主题上拨打
unsubscribe发生了什么。这有点有趣,所以我会研究一下,稍后会写一个答案。我猜你的问题中的引用是否适用取决于你对重用的定义。我的理解是,订阅者可以在异步主题完成后订阅它,但异步主题不能订阅另一个可观察的源。
标签: javascript rxjs