Есть ли способ проверить, подписан ли источник?
Как и в заголовке, в Angular 2 есть ли способ проверить, подписан ли уже источник? Потому что я должен проверить это перед использованием
this.subscription.unsubscribe();
Это мой код:
this.Source = Rx.Observable.timer(startTime, 60000).timeInterval().pluck('interval');
this.Subscription = this.Source
.subscribe(data => { something }
и тогда я хочу быть уверенным, что он подписан до звонка unsubscribe()
2 ответа
Кажется, вы можете проверить, закрыта ли подписка с помощью
this.subscription.closed
укажите, была ли эта Подписка отменена.
У меня был похожий случай, у меня было условие if с одной необязательной подпиской:
if (languageIsSet) {
// do things...
} else {
this.langSub = this.langService.subscribe(lang => {
// do things...
});
}
Если вы хотите безопасно отменить подписку (вы не знаете, подписана она или нет), просто инициализируйте подписку с экземпляром EMPTY:
private langSub: Subscription = Subscription.EMPTY;
Теперь вы можете отписаться без ошибок.
Вы можете проверить, если Subject
имеет наблюдателей, потому что он имеет государственную собственность observers
,
С Observable
s вы не можете, потому что у них обычно нет массивов наблюдателей. Только если вы многоадресно их Subject
с multicast()
оператор например.
Возможно, если бы вы могли описать ваш вариант использования более подробно, я смогу дать вам лучший совет.
const source = ...;
let subscribed = false;
Rx.Observable.defer(() => {
subscribed = true;
return source.finally(() => { subscribed = false });
})
Как я вижу в вашем коде, вы всегда создаете подписку.
Таким образом, если вы создали объект подписки, это означает, что подписка существует, и вы можете отказаться от подписки.
Еще немного не понятно, зачем проверять, существует ли какой-либо подраздел
Btw. Проверка метода unsubscribe() - подписка закрыта или нет. Подписка закрывается, если кто-то вызвал unsubscribe() или наблюдаемый завершен