取消订阅RxJS中的主题

取消订阅RxJS中的主题,rxjs,Rxjs,我发现以下构造让我有点困惑(typescript中提供的示例): 但是Subject类确实有一个成员方法unsubscribe。这与方法一致,即受试者既是可观察者又是观察者,但从我在执行以下操作时实际取消订阅的内容来看: someSubject.unsubscribe(); 我是否取消了与此主题相关的所有其他订阅?看来我有点急着问了一个问题。无论如何,因为我认为这并没有很好的文档记录,如果您通过一些共享服务提供您的主题,可能会导致可怕的错误,下面是示例代码: a = new Rx.Subjec

我发现以下构造让我有点困惑(typescript中提供的示例):

但是Subject类确实有一个成员方法
unsubscribe
。这与方法一致,即受试者既是
可观察者
又是
观察者
,但从我在执行以下操作时实际取消订阅的内容来看:

someSubject.unsubscribe();

我是否取消了与此主题相关的所有其他订阅?

看来我有点急着问了一个问题。无论如何,因为我认为这并没有很好的文档记录,如果您通过一些共享服务提供您的主题,可能会导致可怕的错误,下面是示例代码:

a = new Rx.Subject();

a.next(5) // No console log
s1 = a.subscribe((v) => console.log(v));
s2 = a.subscribe((v) => console.log(v*2));
a.next(5); // 5 & 10 will print out
s2.unsubscribe();
a.next(5); // 5  will print out
s2 = a.subscribe((v) => console.log(v*2)); // I can legally attach/reattach subscriber
a.next(5); // 5 & 10 will print out
a.unsubscribe(); // shut down WHOLE subject
a.next(5) // Will cause ObjectUnsubscribedError
s2 = a.subscribe((v) => console.log(v*2)) // Will cause ObjectUnsubscribedError

另一个好处是,
unsubscribe
不仅会关闭整个主题(使其无法发出和订阅),而且会清除所有内部观察者阵列。因此,没有人会再次收到此主题的通知

您几乎肯定不想在
主题
中调用
取消订阅
。看见事实上,这是一种可能会从v7中的
主题
中删除的方法。@cartant我本来想问你从哪里得到这些信息的,但后来我看到你的RxJS职业:)谢谢你指出你的文章,现在一切都清楚了。
someSubject.unsubscribe();
a = new Rx.Subject();

a.next(5) // No console log
s1 = a.subscribe((v) => console.log(v));
s2 = a.subscribe((v) => console.log(v*2));
a.next(5); // 5 & 10 will print out
s2.unsubscribe();
a.next(5); // 5  will print out
s2 = a.subscribe((v) => console.log(v*2)); // I can legally attach/reattach subscriber
a.next(5); // 5 & 10 will print out
a.unsubscribe(); // shut down WHOLE subject
a.next(5) // Will cause ObjectUnsubscribedError
s2 = a.subscribe((v) => console.log(v*2)) // Will cause ObjectUnsubscribedError