有什么方法可以检查源是否已订阅?

有什么方法可以检查源是否已订阅?

问题描述:

正如标题所说,在Angular 2中,有什么方法可以检查源是否已经订阅?因为我有利用有什么方法可以检查源是否已订阅?

this.subscription.unsubscribe(); 

前检查呢?这是我的代码:

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

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

,然后我想,以确保其订阅调用unsubscribe()

+2

你想检查Observable是否有观察者? – martin

+0

是的,正是如此 – ChristoK

+1

目前仍不清楚为什么你要调用'unsubscribe'之前检查订阅。您始终可以使用空的订阅实例来初始化您的订阅,例如'this.subscription = Subscription.EMPTY',对其调用'unsubscribe'是安全的。 –

之前,您可以检查是否Subject有观察员,因为它有公共财产observers

随着Observable s你不能,因为他们通常不具有观察员阵列。例如,只有通过Subjectmulticast()运算符组合了它们。

也许如果你能更详细地描述你的用例,我将能够给你更好的建议。

const source = ...; 
let subscribed = false; 

Rx.Observable.defer(() => { 
    subscribed = true; 
    return source.finally(() => { subscribed = false }); 
}) 
+0

我已添加我的代码 – ChristoK

+0

@ChristoK查看我的更新 – martin

+0

_Only如果你已经multicasted_ - 但实际上仍然返回一个主题,对吗? –

正如我在代码中看到的,您总是会创建一个订阅。

所以如果你创建了订阅对象,这意味着订阅存在,你可以退订。

它还是有点不明白为什么你需要检查的任何款存在

顺便说一句。取消订阅()方法检查是否已订阅。 如果有人调用unsubscribe()或observable被完成,订阅被关闭