Переключить поток Rxjs из других наблюдаемых - PullRequest
1 голос
/ 28 октября 2019

Я работаю над видеоплеером с двумя отличительными способами определить, следует ли подписаться на наблюдаемое или нет. это _videoInfo $ и _exit $. Это потоки, которые выдают значения при вызове на проигрывателе.

У меня есть наблюдаемая переменная _data $, которая выдает все значения, которые мне нужно отслеживать, но я хочу подписаться на нее только во время воспроизведения видеоплеера.

Я знаю, что следующий подход неверен, но он объясняет, чего я пытаюсь достичь. В настоящее время он не работает, потому что я не могу отписаться от _data $.

 const _data$ = data$.subscribe(event => {
  // data I need when video is playing
});

_videoInfo$.subscribe((res): void => {
  // when res emits it means a new video is starting
  _data$.subscribe();
});

_exit$.subscribe({
 next: () => {
  _data.unsubscribe(); // this does not work, but i want to unsubscribe here
 },
 error: () => {},
 complete: () => {}
});

Как я могу подписаться на _data $, когда $ videoInfo выдает значение, и отписаться от него, когда _exit $ выдает значение?

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Оператор пути:

_data$.pipe(skipUntil($videoInfo),takeUntil(_exit$)).subscribe()
1 голос
/ 28 октября 2019

observable.subscribe() возвращает объект Subscription, который можно использовать для отмены подписки.

let subscription;

_videoInfo$.subscribe((res): void => {
  // when res emits it means a new video is starting
  subscription = _data$.subscribe();
});

_exit$.subscribe({
 next: () => {
  if (subscription) {
   subscription.unsubscribe(); 
  }
 },
 error: () => {},
 complete: () => {}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...