正如标题所说,在Angular 2中,有没有办法检查源是否已经订阅?因为我必须在使用
之前检查它this.subscription.unsubscribe();
这是我的代码:
this.Source = Rx.Observable.timer(startTime, 60000).timeInterval().pluck('interval');
this.Subscription = this.Source
.subscribe(data => { something }
然后我想确保在调用unsubscribe()
答案 0 :(得分:3)
看来您可以检查订阅是否已用
关闭this.subscription.closed
指示此订阅是否已经取消订阅。
答案 1 :(得分:1)
您可以检查const char*
是否有观察员,因为它有公共属性Subject
。
使用observers
s你不能,因为他们通常没有观察员阵列。只有当您通过Observable
与Subject
运营商进行多播时才会这样做。
如果您能够更详细地描述您的用例,我可以为您提供更好的建议。
multicast()
答案 2 :(得分:1)
正如我在您的代码中看到的那样,您始终可以创建订阅。
因此,如果您创建了订阅对象,则意味着订阅存在,您可以取消订阅。
仍然有点不清楚为什么你需要检查是否存在任何子部分
顺便说一下。 unsubscribe()方法检查是否已关闭订阅。 如果有人调用unsubscribe()或者observable,那么订阅将被关闭
答案 3 :(得分:1)
我有一个类似的案例,我有一个带一个可选订阅的if条件:
if (languageIsSet) {
// do things...
} else {
this.langSub = this.langService.subscribe(lang => {
// do things...
});
}
如果您想安全地取消订阅(您不知道是否已订阅),只需使用EMPTY实例初始化订阅:
private langSub: Subscription = Subscription.EMPTY;
现在您可以无误地退订。