Я работаю над видеоплеером с двумя отличительными способами, чтобы определить, следует ли подписаться на наблюдаемое или нет. это _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 ответа
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: () => {}
});
Операторский способ:
_data$.pipe(skipUntil($videoInfo),takeUntil(_exit$)).subscribe()
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.