有什么方法可以检查源是否已订阅?
问题描述:
正如标题所说,在Angular 2中,有什么方法可以检查源是否已经订阅?因为我有利用有什么方法可以检查源是否已订阅?
this.subscription.unsubscribe();
前检查呢?这是我的代码:
this.Source = Rx.Observable.timer(startTime, 60000).timeInterval().pluck('interval');
this.Subscription = this.Source
.subscribe(data => { something }
,然后我想,以确保其订阅调用unsubscribe()
答
之前,您可以检查是否Subject
有观察员,因为它有公共财产observers
。
随着Observable
s你不能,因为他们通常不具有观察员阵列。例如,只有通过Subject
与multicast()
运算符组合了它们。
也许如果你能更详细地描述你的用例,我将能够给你更好的建议。
const source = ...;
let subscribed = false;
Rx.Observable.defer(() => {
subscribed = true;
return source.finally(() => { subscribed = false });
})
答
正如我在代码中看到的,您总是会创建一个订阅。
所以如果你创建了订阅对象,这意味着订阅存在,你可以退订。
它还是有点不明白为什么你需要检查的任何款存在
顺便说一句。取消订阅()方法检查是否已订阅。 如果有人调用unsubscribe()或observable被完成,订阅被关闭
你想检查Observable是否有观察者? – martin
是的,正是如此 – ChristoK
目前仍不清楚为什么你要调用'unsubscribe'之前检查订阅。您始终可以使用空的订阅实例来初始化您的订阅,例如'this.subscription = Subscription.EMPTY',对其调用'unsubscribe'是安全的。 –