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