有没有办法检查源是否已订阅?

时间:2017-08-02 09:37:23

标签: javascript angular typescript rxjs5

正如标题所说,在Angular 2中,有没有办法检查源是否已经订阅?因为我必须在使用

之前检查它
this.subscription.unsubscribe();

这是我的代码:

this.Source = Rx.Observable.timer(startTime, 60000).timeInterval().pluck('interval');

this.Subscription = this.Source
  .subscribe(data => { something }

然后我想确保在调用unsubscribe()

之前订阅它

4 个答案:

答案 0 :(得分:3)

看来您可以检查订阅是否已用

关闭
this.subscription.closed

指示此订阅是否已经取消订阅。

答案 1 :(得分:1)

您可以检查const char*是否有观察员,因为它有公共属性Subject

使用observers s你不能,因为他们通常没有观察员阵列。只有当您通过ObservableSubject运营商进行多播时才会这样做。

如果您能够更详细地描述您的用例,我可以为您提供更好的建议。

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;

现在您可以无误地退订。