Есть ли способ проверить, подписан ли источник?

Как и в заголовке, в 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,

С Observables вы не можете, потому что у них обычно нет массивов наблюдателей. Только если вы многоадресно их Subject с multicast() оператор например.

Возможно, если бы вы могли описать ваш вариант использования более подробно, я смогу дать вам лучший совет.

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

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

Как я вижу в вашем коде, вы всегда создаете подписку.

Таким образом, если вы создали объект подписки, это означает, что подписка существует, и вы можете отказаться от подписки.

Еще немного не понятно, зачем проверять, существует ли какой-либо подраздел

Btw. Проверка метода unsubscribe() - подписка закрыта или нет. Подписка закрывается, если кто-то вызвал unsubscribe() или наблюдаемый завершен

Другие вопросы по тегам